ant*_*009 5 java android nullable kotlin
Android 3.5.1
Run Code Online (Sandbox Code Playgroud)
我使用的是WebView,我注意到当我重写某些方法时,所有参数都是可为null的类型:
webview.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
return super.shouldOverrideUrlLoading(view, request)
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着我必须使用safe call运算符来使用它们。但是,当我查看WebViewClient从其重写方法的类时,未nullable在Java代码中指定为注释。
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return shouldOverrideUrlLoading(view, request.getUrl().toString());
}
Run Code Online (Sandbox Code Playgroud)
因此,我想到了要从重写方法中删除可空性还是保留它们?
此问题的来源来自Java和Kotlin之间的互操作性。两者之间存在一些基本的语言级别差异Java,Kotlin这会导致互操作性问题。Android Studio提供了一些Lint检查警告它们,例如Unknown Nullness。(参考)
通过Unknown nullness查看来自android.com的Lint check的详细信息,我们看到:
要从中改进引用代码
Kotlin,请考虑在此处使用@NonNull或添加明确的null信息@Nullable。
如果
Kotlin用于引用在Java类(例如, aString)中定义的未注释的名称成员,则编译器将不知道String映射到aString还是String?inKotlin。这种模糊性是通过表示平台类型,String!。
中的任何引用都
Java可能为null,这使得Kotlin来自的对象的严格null安全性要求不切实际Java。类型Java声明在经过特殊处理的Kotlin,并呼吁平台类型。
因此,当我们重写一个Java其参数不使用无效注释进行注释的方法时,IDE ?将为Kotlin类中的参数添加可为空的符号()。通过为其中一个参数传递值来避免 NullPointerException在调用方法时抛出。Javanull
webview.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView, // <- potential to throw NPE before executing the function block!
request: WebResourceRequest // <- as well!
): Boolean {
return super.shouldOverrideUrlLoading(view, request)
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之,当在类中定义了重写的方法时,我们不应?从函数参数中删除符号Java。
| 归档时间: |
|
| 查看次数: |
486 次 |
| 最近记录: |