Android Studio:取消装箱“xxx"可能会产生“java.lang.NullPointerException" [英] Android Studio: Unboxing of 'xxx' may produce 'java.lang.NullPointerException'

查看:26
本文介绍了Android Studio:取消装箱“xxx"可能会产生“java.lang.NullPointerException"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在关注 Android 图书示例:

I'm following the Android book example:

//Get the drink from the intent
int drinkIdd = (Integer)getIntent().getExtras().get(EXTRA_DRINKID);
Drink drink = Drink.drinks[drinkIdd];

而且这个项目可以在 Android Studio 中运行,但在线时会出现黄色警告:

And this project could be ran in Android Studio but with a yellow warning on line:

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.

From my understanding, get(EXTRA_DRINKID) return an Object, and (Integer) converts it to int type to meet with int drinkIdd.

  • 您能否告诉我这些信息的确切含义,初学者将不胜感激.
  • 我可以这样写上一行吗?使用 ( ) 将 getIntent().getExtras().get() 包装成一个整体,因为它最终返回一个对象,然后将其转换为 int.

  • Could you tell me what this info means exactly, your answer will be appreciated for a beginner.
  • And could I write upper line like this? Using ( ) to wrap getIntent().getExtras().get() as a whole one since it finally return an object, and then convert it to int.

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

推荐答案

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

This is because when calling the following code:

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

返回的对象可以为空.

当您使用 Integer 转换值时,它不会抱怨,因为您可以将 null 转换为 Integer.

When you casting the value with Integer, it will not complaining because you can cast null to Integer.

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

But when you call the following:

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

因为当您拆箱时,它会抱怨,因为您无法拆箱 null 值.

because when you unboxing, it will complaining because you can't unboxing a null value.

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

You better using getInt() instead of get() like this:

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

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

So you don't get the warning anymore and make your code more robust.

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

I don't know what book you're reading but I think you need to change your book reference. It seems the book Author haven't grasp the basic concept of Java and Android API. So, you need to use another Android book for your learning process until the Author has finished his/her job ;)

注意:
将包装类型 (Integer) 的对象转换为其相应的原始 (int) 值称为拆箱.在自动装箱和取消装箱中了解更多信息.

这篇关于Android Studio:取消装箱“xxx"可能会产生“java.lang.NullPointerException"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆