使用自动拆箱,此语句将自动起作用:
int myPrimitive = (Integer) doIt();
但是,如果我想在一行中明确地从 an 转换为 an,我必须将括号放在哪里Integer
?int
使用自动拆箱,此语句将自动起作用:
int myPrimitive = (Integer) doIt();
但是,如果我想在一行中明确地从 an 转换为 an,我必须将括号放在哪里Integer
?int
你可以这样做:
int myPrimitive = (int) (Integer) doIt();
但正如您所说,自动拆箱将为您提供。
一个不好的例子表明链式转换工作(永远不要使用这个代码):
Map notReallyAMap = (Map) (Object) new String();
链式转换的问题在于,无论您在哪里使用,转换都是合法的,并且您可以移除中介;或者强制转换只会导致ClassCastException
. 所以你永远不应该使用它。
编译器要么为你解开 Integer 的装箱,要么你自己做——这是无法避免的。
所以你需要做
int myPrimitive = ((Integer) doIt()).intValue();
或更简单地说,更改doIt()
为返回 an ,int
因为您似乎想要处理int
s 而不是 (null-able) Integer
s。