web-dev-qa-db-ja.com

継承されたクラスでnull可能と注釈されていないオーバーライドされたメソッドのnull可能性を削除する必要がありますか

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クラスを確認したところ、それらのメソッドはJavaコードでnullableアノテーションとして指定されていません。

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

だから私は、オーバーライドされたメソッドからnull可能性を削除するか、それともそれらを保持するのかと考え残っていますか?

6
ant2009

すべてがC/C++でのネイティブ開発から始まっているため、Null参照は今や誰にとっても明らかな例外です。メモリ内のオブジェクトへの参照が欠落しているか、さまざまな理由で消去されている可能性があります。 Javaはこれらのネイティブ言語の方法で設計されました、どこでもnullポインターを想定しています。

すべての変更可能な状態の管理は、何千ものマイクロサービスで楽しくなっています。 これはNullable参照に対して多くの回避策を引き起こします。-Optionalオブジェクト-Null Objectのモック--Wrappers参照の周り-Annotations、 etc.そして、これらすべては、どこかに割り当てられたオブジェクトの状態の変更を回避するためです。

最後に、Kotlinはここでは最初ではありません。不変状態のScalaは、使用法とサポートアプリケーションで優れた経験を持っています。 この質問に答えて要約します Javaは親C++からこのように設計されており、どこでもnull値を期待する必要があります。注釈が付けられていない@Nullable、この理由のため。そしてKotlinがJavaの使用法を処理するのと同じ方法であり、そのため、オーバーライドされたメソッドでnull値を処理する必要があるのはそのためです。

1
GensaGames

言語レベルでは、これは一般化することができます:

適切なJava相互運用性のために、KotlinコードはJavaコードの注釈を反映する必要があります。

リンターは、Kotlinの相互運用性のために、反対方向にアノテーションがないことについて不満を言うだけです。

この最近の記事を参照してください 書き方JavaフレンドリーなKotlinコード?

1
Martin Zeitler