【发布时间】:2014-03-23 07:16:45
【问题描述】:
Kotlin 在编译时使用与“可为空?”的分离进行出色的空检查。和“不可为空”的对象。它有一个 KAnnotator 来帮助确定来自 Java 的对象是否为空。但是如果不可空类的某些部分发生了变化呢?
假设我们有一只猫,它肯定有一个可以喵喵叫的头。当我们让猫喵喵叫时,它会用头喵喵叫:
package org.cat
class CatHead(){
fun mew(){
println("Mew")
}
}
class Cat(){
var head = CatHead()
fun mew(){
head.mew()
}
}
fun main(args:Array<String>){
val cat = Cat()
cat.mew()
}
现在让我们在这张漂亮的图片中添加一个 JAVA 猫疯子 (CatManiac.java),他在得到时会砍掉一只猫的头:
import org.cat.*;
public class CatManiac {
public static void cutCatHead(Cat cat){
cat.setHead(null);
}
}
所以如果我们把一只猫交给一个疯子,他肯定会砍掉它的头。没有头的猫怎么叫喵?
fun main(args:Array<String>){
val cat = Cat()
CatManiac.cutCatHead(cat)
cat.mew()
}
我们在 kotlin 中收到 runtime 错误,因为 null,在点调用 cat.mew():
Exception in thread "main" java.lang.IllegalArgumentException".
我相信这是我们在 Kotlin 中使用 Java 库时经常遇到的问题。有什么方法或计划来警告/与之抗争吗?
附:像 KAnnotator 这样的东西在你的代码中寻找这样的东西?
【问题讨论】:
标签: nullpointerexception runtime kotlin