提问者:小点点

改变kotlin中被覆盖函数参数的可空性


我正在实现第三方库(java)的接口。我正在用以下签名覆盖一个函数:

override fun onCallback(name: String?) {

}

我可以在没有编译器抱怨的情况下更改为以下内容:

override fun onCallback(name: String) {

}

这有什么影响?如果底层库调用onCallback(null)会发生什么?


共1个答案

匿名用户

来自Java的类型是平台类型(在这种情况下,此参数的类型为String!。如果该参数没有在Java中注释,则由您决定它是否可以具有null值,并且您必须相应地在静态编程语言中标记参数的类型。如果您将其标记为不可空,但Java代码将null传递给它,您将在运行时获得异常-静态编程语言会为此类参数生成检查,您可以通过反编译生成的字节码来查看。

另请参阅有关空安全性和平台类型的官方文档以获取更多详细信息。