我正在实现第三方库(java)的接口。我正在用以下签名覆盖一个函数:
override fun onCallback(name: String?) {
}
我可以在没有编译器抱怨的情况下更改为以下内容:
override fun onCallback(name: String) {
}
这有什么影响?如果底层库调用onCallback(null)
会发生什么?
来自Java的类型是平台类型(在这种情况下,此参数的类型为String!
。如果该参数没有在Java中注释,则由您决定它是否可以具有null
值,并且您必须相应地在静态编程语言中标记参数的类型。如果您将其标记为不可空,但Java代码将null
传递给它,您将在运行时获得异常-静态编程语言会为此类参数生成检查,您可以通过反编译生成的字节码来查看。
另请参阅有关空安全性和平台类型的官方文档以获取更多详细信息。