Kotlin 空安全实战:用类型系统告别 NullPointerException 的崩溃噩梦
· 阅读需 7 分钟
Tony Hoare(快速排序的发明者)曾在 2009 年公开道歉,说他发明 null 引用是一个"十亿美元的错误"。在 Java 世界里,NullPointerException(NPE)几乎是每个程序员的日常噩梦——你以为对象不为空,结果运行时直接崩溃,堆栈信息还告诉你崩溃发生在第 3 层调用之后。
// Java:经典的 NPE 陷阱
String city = user.getAddress().getCity().getName();
// 如果 user 为 null?NPE!
// 如果 getAddress() 返回 null?NPE!
// 如果 getCity() 返回 null?NPE!
为了防 NPE,你不得不写一堆 if (xxx != null) 的防御性代码。而 Kotlin 的解决方案是:在类型系统层面就区分"可以为空"和"不能为空",让编译器帮你把关,把 NPE 从运行时提前到编译时。