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

时间:2018-04-11 03:51:09

标签: java android-studio 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)返回一个Object,而(Integer)将其转换为int类型以与int drinkIdd会面。

  • 你能否告诉我这些信息的确切含义,初学者会对你的回答表示赞赏。
  • 我可以像这样写上线吗?使用()将getIntent()。getExtras()。get()作为一个整体包装,因为它最终返回一个对象,然后将其转换为int。

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

1 个答案:

答案 0 :(得分:0)

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

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和Android API的基本概念。因此,在作者完成他/她的工作之前,您需要使用另一本Android书籍来完成学习过程;)

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