私は、継承されたクラスでNULL可能でアノテートされていないメソッドのオーバーライドのNULL値の許容を削除する必要があります

ant2009:
Android 3.5.1

私はWebViewのを使用していたと私はメソッドの一部をオーバーライドする場合、すべてのパラメータがNULL可能タイプであることに気づきました。

webview.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
         return super.shouldOverrideUrlLoading(view, request)
    }
}

これは私が使用しなければならないことを意味safe callそれらを使用する演算子を。しかし、私が見たときにWebViewClient、彼らは次のように指定されていないから、私はメソッドをオーバーライドしていることを、クラスnullableのJavaコード内の注釈。

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    return shouldOverrideUrlLoading(view, request.getUrl().toString());
}

私はオーバーライドされたメソッドからNULL値を許容するかどうかを削除するか、それらを保つか思考を残していますので、?

aminography:

この問題の原因は、から来ているJavaとKotlinの間の相互運用性間にいくつかの基本的な言語のレベル差があるJavaKotlin相互運用性の問題が発生するが。Androidのメーカーはいくつかの提供Lintなど、それらを警告するチェックをUnknown Nullness参照


ここでは、画像の説明を入力します。

詳細を見てとることによってUnknown nullnessからリントチェックをandroid.com、我々はそれを参照してください。

コードを参照し向上させるためにKotlin、どちらかとここに明示的にnullであるかどうかの情報を追加することを検討@NonNull@Nullable


そして、のdeveloper.android.com

If you use Kotlin to reference an unannotated name member that is defined in a Java class (e.g. a String), the compiler doesn't know whether the String maps to a String or a String? in Kotlin. This ambiguity is represented via a platform type, String!.


and on kotlinlang.org:

Any reference in Java may be null, which makes Kotlin's requirements of strict null-safety impractical for objects coming from Java. Types of Java declarations are treated specially in Kotlin and called platform types.


したがって、我々は上書きする場合Java、その引数がNULLかどうかのアノテーションで注釈されていないという方法を、IDEはNULL記号(追加?で引数の)Kotlinクラスを。それはにつながる投げる避ける NullPointerException方法がで呼び出されたときにJava渡すことにより、null引数のいずれかの値を。

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)
    }
}


一言で言えば、我々はない(SHOULD NOT)削除?オーバーライドされたメソッドを定義した関数の引数からサインJavaクラス。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=311748&siteId=1