【问题标题】:Android Studio: Unboxing of 'xxx' may produce 'java.lang.NullPointerException'Android Studio:“xxx”的拆箱可能会产生“java.lang.NullPointerException”
【发布时间】:2019-10-08 16:03:17
【问题描述】:

我正在关注 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));
    

【问题讨论】:

    标签: java android-studio unboxing


    【解决方案1】:

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

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

    返回的对象可以为空。

    当你用 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 阅读更多内容。

    【讨论】:

    • 谢谢。我只是尝试您将(整数)更改为getInt()的方法。 int drinkIdd = getIntent().getExtras().getInt(EXTRA_DRINKID);这一次Android工作室抱怨这个新添加的getInt,并给了我警告:(方法调用'getInt'可能会产生'java.lang.NullPointerException')是的,我会花时间消化自动装箱和拆箱,谢谢注意!
    • 警告是预期的,因为当您调用 getIntent().getExtras() 时,Bundle 可以为空。因此,您需要检查 getExtras()
    • 抱歉,我不确定您所说的用检查包围代码是什么意思...您能代表它应该是的整行吗?
    • 你可以用这样的东西包围代码:Bundle bundle = getIntent.getExtras(); int drinkIdd = -1; if (bundle != null) { drinkIdd = bundle.getInt(EXTRA_DRINKID); }
    • 通过对 getExtras() 使用捆绑检查,它确实修复了警告,太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    相关资源
    最近更新 更多