2017-11-24 5 views
0

私はサードパーティライブラリ(java)のインターフェイスを実装しています。私は、次のシグネチャを持つ関数をオーバーライドしています:kotlinのオーバーライドされた関数のパラメータのNULL可能性を変更します

override fun onCallback(name: String?) { 

} 

私は、コンパイラ文句なしに次のように変更することができます。

override fun onCallback(name: String) { 

} 

この効果は?基礎となるライブラリがonCallback(null)を呼び出すとどうなりますか?

答えて

2

Javaからの型はプラットフォーム型です(この場合、このパラメータの型はString!です。パラメータにJavaで注釈が付いていない場合は、nullの値を持つかどうかを判断する必要があります。それに応じてKotlinのパラメータのタイプをマークする必要がありますが、null以外のものとしてマークすると、Javaコードはnullを渡します。実行時に例外が発生します - Kotlinはこのようなパラメータのチェックを生成します逆コンパイル生成されたバイトコードによってで。

また、詳細についてはnull safety and platform typesについての公式ドキュメントを参照してください。

+0

OKああ、(私が聞きます他の週にはプラットフォームの種類に関する話をしました、私の脳は接続していませんでした)私はいくつかの希望的な考え方を適用したと思います。私はちょうど関数に一致しない呼び出しが無駄にフィルタリングされることを望んでいた...私は今nullcheckを避ける方法を見ないでください.- ' – Adam

+0

あなたがそれをしたい場合は、パラメータにnull可能な型関数の最初の行に 'name?:return'を追加します。パラメータは本質的に 'val'sなので、関数の残りの部分ではnullでない型にスマートキャストされます。 – zsmb13

関連する問題