0

使用自动拆箱,此语句将自动起作用:

int myPrimitive = (Integer) doIt();

但是,如果我想在一行中明确地从 an 转换为 an,我必须将括号放在哪里Integerint

4

2 回答 2

4

你可以这样做:

int myPrimitive = (int) (Integer) doIt();

但正如您所说,自动拆箱将为您提供

一个不好的例子表明链式转换工作(永远不要使用这个代码):

Map notReallyAMap = (Map) (Object) new String();

链式转换的问题在于,无论您在哪里使用,转换都是合法的,并且您可以移除中介;或者强制转换只会导致ClassCastException. 所以你永远不应该使用它

于 2010-10-11T20:29:39.940 回答
2

编译器要么为你解开 Integer 的装箱,要么你自己做——这是无法避免的。

所以你需要做

int myPrimitive = ((Integer) doIt()).intValue();

或更简单地说,更改doIt()为返回 an ,int因为您似乎想要处理ints 而不是 (null-able) Integers。

于 2010-10-11T20:47:21.613 回答