编程语言
首页 > 编程语言> > Android Studio:’xxx’的拆箱可能会产生’java.lang.NullPointerException’

Android Studio:’xxx’的拆箱可能会产生’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)返回一个Object,而(Integer)将它转换为int类型以满足int drinkIdd.

>你能告诉我这些信息究竟意味着什么,你的答案将受到初学者的赞赏.
>我可以像这样写上线吗?使用()将getIntent().getExtras().get()作为一个整体包装,因为它最终返回一个对象,然后将其转换为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);

因为当你取消装箱时,它会抱怨,因为你无法取消装箱空值.

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

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

因此,您不再收到警告,并使您的代码更加健壮.

我不知道你正在读什么书,但我认为你需要改变你的书参考.看来这本书的作者还没有掌握Java和Android API的基本概念.因此,在作者完成他/她的工作之前,您需要使用另一本Android书籍进行学习;)

注意:
将包装类型(Integer)的对象转换为其对应的原始(int)值称为取消装箱.阅读更多Autoboxing and Unboxing.

标签:unboxing,java,android-studio
来源: https://codeday.me/bug/20191006/1862904.html