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() 包装为一个整体,因为它最终 return 一个对象,然后将其转换为 int.
int drinkIdd = (Integer)(getIntent().getExtras().get(EXTRA_DRINKID));
这是因为在调用以下代码时:
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.
阅读更多内容
我正在关注 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() 包装为一个整体,因为它最终 return 一个对象,然后将其转换为 int.
int drinkIdd = (Integer)(getIntent().getExtras().get(EXTRA_DRINKID));
这是因为在调用以下代码时:
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.