在kotlin中改变被覆盖的函数参数的可空性
我正在实现一个第三方库(Java)的接口。 我用下面的签名覆盖了一个函数:
override fun onCallback(name: String?) { }
我可以在没有编译器的情况下更改以下内容:
override fun onCallback(name: String) { }
这是什么效果? 如果底层库调用onCallback(null)
会发生什么情况?
来自Java的types是平台types(在这种情况下,这个参数有一个String!
types,如果这个参数没有用Java注释,那么决定它是否可以有一个null
值,并且你必须标记Kotlin中的参数types相应地如果你把它标记为非空,但是Java代码将null
传递给它,你会在运行时得到一个exception – Kotlin生成这样的参数检查,你可以通过反编译生成的字节码。
有关更多详细信息,另请参阅有关空值安全性和平台types的官方文档。