繁体   English   中英

"(Integer)getIntent().getExtras().get(x)" 与 "(Integer)getIntent().getStringExtra(x)" 有何不同?

[英]How is "(Integer)getIntent().getExtras().get(x)" different from "(Integer)getIntent().getStringExtra(x)"?

我试图从我创建的 Intent 中提取一个 int,但第二个抛出错误“无法将 java.lang.String 转换为 int”,而第一个则没有。 为什么会发生这种情况?

谢谢

要获得需要使用的int

getIntent().getIntExtra("x", 0)

或者

getIntent().getExtras().getInt("x")

第一个是:

(Integer)getIntent().getExtras().get(x)

这将根据键x检索一个Object并尝试将其转换为Integer 如果get()返回其他内容,您将在运行时崩溃并ClassCastException

第二个是:

(Integer)getIntent().getStringExtra(x)

这将检索基于键xString并尝试将其转换为Integer Object可能是Integer ,这就是为什么第一个编译但可能在运行时失败的原因。 String不可能是Integer 因此,这在编译时失败。

正如 Oleg 先生所指出的,正确的答案是在Intent上调用getIntExtra()或在getExtras()返回的Bundle上调用getInt() getExtras()

这都是关于铸造的。
getIntent().getExtras().get(x) 返回一个对象类型。
而 (Integer)getIntent().getStringExtra(x) 返回一个字符串类型的对象。

如果您还记得(或刚刚学习),默认情况下每个 Java Class扩展 Object 并且会得到它的方法,例如toString()
这就是为什么您可以尝试将 Object 转换为任何类的原因。 尝试 - 但如果失败,您只会在运行时知道它。

另一方面, String是一个已经扩展了Object的类,与Integer无关,它有自己的值和属性。
因此,当您尝试从String转换为Integer您会收到错误消息。

最佳解决方案已经发布。
我只想补充一点,你仍然可以这样做:

getInteger(getIntent().getStringExtra(x));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM