我正在实现第三方库(java)的接口。我正在覆盖具有以下签名的函数:
override fun onCallback(name: String?) {
}
我可以在没有编译器抱怨的情况下更改为以下内容:
override fun onCallback(name: String) {
}
这有什么作用?如果底层库调用onCallback(null)
?
答案 0 :(得分:2)
来自Java的类型是平台类型(在这种情况下,此参数的类型为String!
。如果参数未在Java中注释,则由您自行决定是否可以使用{{ 1}}值,你必须相应地在Kotlin中标记参数的类型。如果你把它标记为非可空,但是Java代码将null
传递给它,你将在运行时得到一个异常--Kotlin生成对这样的参数的检查,您可以通过反编译生成的字节码来查看。
有关更多详细信息,请参阅有关null safety and platform types的官方文档。