私はAndroid本の例に従っています:
_//Get the drink from the intent
int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);
Drink drink = Drink.drinks[drinkIdd];
_
このプロジェクトはAndroid Studioで実行できますが、黄色の警告が表示されます:
_int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);
_
と:
_info: Unboxing of '(Integer)getIntent().getExtras().get(EXTRA_DRINKID)' may produce 'Java.lang.NullPointerException'
_
私の理解では、get(EXTRA_DRINKID)
はオブジェクトを返し、(Integer)はそれをint型に変換して_int drinkIdd
_に適合させます。
そして、私はこのように上の行を書くことができますか? ()を使用して、getIntent()。getExtras()。get()を全体としてラップします。最終的にオブジェクトを返し、それをintに変換するためです。
_int drinkIdd = (Integer)(getIntent().getExtras().get(EXTRA_DRINKID));
_
これは、次のコードを呼び出すときのためです。
_getIntent().getExtras().get(EXTRA_DRINKID);
_
返されるオブジェクトはnullにすることができます。
Integerを使用して値をキャストする場合、Integerにnullをキャストできるため、問題はありません。
ただし、次を呼び出すと:
_int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);
_
ボックス化解除すると、null値をボックス化解除できないため、エラーが発生します。
次のように、getInt()
の代わりにget()
を使用することをお勧めします。
_int drinkIdd = getIntent().getExtras().getInt(EXTRA_DRINKID);
_
したがって、警告が表示されなくなり、コードがより堅牢になります。
どの本を読んでいるのかわかりませんが、参考文献を変更する必要があると思います。本の著者がJavaおよびAndroid APIの基本概念を理解していないため、別のAndroid著者が彼/彼女の仕事を完了するまで、あなたの学習プロセスのための本;)
注:
ラッパータイプ(整数)のオブジェクトを対応するプリミティブ(整数)値に変換することをボックス化解除と呼びます。詳細は Autoboxing and Unboxing をご覧ください。