Javaライブラリのメソッドをオーバーライドしています。この関数のパラメータには、@NonNull
と注釈が付けられています。ただし、このメソッドが呼び出されると、パラメータはしばしばnull
の値となります。私がKotlinのメソッドをオーバーライドすると、@NonNull
アノテーションを尊重し、そのパラメータをnull不可能なものとしてマークする必要があります。もちろん、Kotlinはパラメータがnull値で入ってくると実行時に例外をスローします。 Kotlinのメソッドをオーバーライドして@NonNull
アノテーションを無視できる方法はありますか?Javaメソッドをオーバーライドして、パラメータのNULL可能性を変更するにはどうすればよいですか?
特に、私はAndroid用のappcompatライブラリを使用しています。この方法は、KotlinにAppCompatActivity.java
@CallSuper
public void onSupportActionModeFinished(@NonNull ActionMode mode) {
}
オーバーライドである:
override fun onSupportActionModeFinished(mode: ActionMode) {
super.onSupportActionModeFinished(mode)
}
あなたが、それはまたCallSuper注釈が付いていますので、NULL以外のパターンがある従うことが重要である理由。ヌル値を渡した場合、アノテーションは値がヌルでないことを確認するためのものであるため、スーパーメソッドにチェックはありません。あなたはほぼ確実にNPEで終わるでしょう。このメソッドをフレームワーク外で明示的に呼び出さない場合、フレームワークはこの注釈を尊重するため、null値は決して与えられません。 – zgc7009
ライブラリはそのメソッドを呼び出していて、自分のコードではなくヌル値を渡しています。ライブラリはそれ自身の注釈を破っています。 Javaでオーバーライドしてnullをスーパーメソッドに渡すと、NPEは発生しません。 – brain
世界で何が、ちょうど奇妙です。 – zgc7009