Android 工作室:'xxx' 的拆箱可能会产生 'java.lang.NullPointerException'

Android Studio: Unboxing of 'xxx' may produce 'java.lang.NullPointerException'

我正在关注 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) return一个Object,(Integer)将其转换为int类型满足int drinkIdd

这是因为在调用以下代码时:

getIntent().getExtras().get(EXTRA_DRINKID);

返回的对象可以为null。

当您将值转换为 Integer 时,它不会报错,因为您可以将 null 转换为 Integer。

但是当您调用以下内容时:

int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);

因为当你拆箱时,它会抱怨因为你不能拆箱一个 null 值。

你最好像这样使用 getInt() 而不是 get():

int drinkIdd = getIntent().getExtras().getInt(EXTRA_DRINKID);

这样您就不会再收到警告并使您的代码更加健壮。

我不知道你在读什么书,但我认为你需要更改你的书名。看来本书作者还没有掌握Java和AndroidAPI的基本概念。因此,在作者完成 his/her 工作之前,您需要使用另一本 Android 书来学习 ;)

注:
将包装器类型 (Integer) 的对象转换为其对应的原始 (int) 值称为拆箱。在 Autoboxing and Unboxing.

阅读更多内容