24

Kotlin では、オブジェクトの作成後に null およびインスタンス化できるオブジェクト内の変数を宣言する 2 つの方法があるようです。

var myObject : Any? = null

また

var lateinit myObject : Any  

var を null 可能にして後で割り当てることができるのに、なぜ lateinit キーワードが必要なのか、私は混乱しています。各方法の長所と短所は何ですか?また、それぞれをどのような状況で使用する必要がありますか?

4

3 に答える 3

5

lateinitキーワードはavoid、オブジェクト内のフィールドを参照するときにチェックを無効にするためにフィールドで使用されます。このキーワードは、依存性注入を使用して変数を初期化する場合、または単体テストのセットアップ メソッドで変数を初期化する場合に主に使用されます。

?フィールドがセッターによって、またはオブジェクトのメソッド内で後でプログラムで初期化されるときにフィールドで使用されます。これは?.、フィールドを参照するときに null をチェックするか、null safety( ) を使用するように強制するためです。

于 2016-02-29T07:59:25.270 に答える
1

プロパティがnullであってはならず、将来のある時点で設定されない場合は、lateinitキーワードで宣言する方が安全です。これにより、設定される前にアクセスすると、それを正確に説明する例外が発生することが保証されます。

従来の Java の方法は、ジェネリックNullPointerExceptionを説明なしでスローすることです。自分でコードを書いた場合は手がかりがあるかもしれませんが、他の誰かがエラーを見つけた場合、その特定の変数がなぜnull.

于 2016-05-07T18:53:46.867 に答える