Java将kotlin类内容修改为null

Kotlin在编译时使用分离方式进行了空白检查,以“可空”? 和“notnullable”对象。 它有一个KAnnotator来帮助确定来自Java的对象是否为nullabale。 但是,如果不可空的类的某些部分发生了变化呢?

想想看,我们有一只猫,它肯定有一头可以咀嚼的头。 当我们问猫咪喵喵,它的脑袋嗡嗡作响:

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() } 

调用cat.mew()的时候,我们在kotlin里面因为null而得到一个运行时错误:

 Exception in thread "main" java.lang.IllegalArgumentException". 

我相信这是在Kotlin中使用Java库时可能遇到的一个非常常见的问题。 有没有任何方法或任何计划警告/与之斗争?

PS像KAnnotator在你的代码中寻找这样的东西?

有Java代码检查器,最终将扩展为Kotlin代码。

例如,IntelliJ中的那个会马上提醒你这个问题。 它是开源社区版的一部分,所以你可以自己尝试一下。

同时请注意,Kotlin给了你一个比Java更大的优势:它引入错误的时候失败了。 很多Kotlin的调用很难通过null,只能失败。 在Kotlin中,首先引入了非法空值的情况下,大多会得到运行时错误。