使用原始包装器的Java强制转换-Java6和Java8之间的区别

使用原始包装器的Java强制转换-Java6和Java8之间的区别,java,casting,wrapper,primitive,Java,Casting,Wrapper,Primitive,我遇到了这段遗留代码(Java6)(这是一个简单的版本,可以解决我的问题): 上面这一个显然不起作用,因为包装器只能强制转换到相应的基元类型。我通过以下方式解决了此问题: Long toConvert = (Long) o; String convert = toConvert.toString(); d= Double.parseDouble(convert); 它很好用,除了丑。我尝试了另一种解决方案: d = (double) o; 我也工作得很好,但当我在新的Java8项目中检查这个

我遇到了这段遗留代码(Java6)(这是一个简单的版本,可以解决我的问题):

上面这一个显然不起作用,因为包装器只能强制转换到相应的基元类型。我通过以下方式解决了此问题:

Long toConvert = (Long) o;
String convert = toConvert.toString();
d= Double.parseDouble(convert);
它很好用,除了丑。我尝试了另一种解决方案:

d = (double) o;
我也工作得很好,但当我在新的Java8项目中检查这个解决方案(纯粹的好奇)时,我得到了

java.lang.ClassCastException:java.lang.Long不能转换为java.lang.Double


在原语包装器方面,Java6和Java8有什么不同,可以解释观察到的行为吗

你在用Javac吗?或者Eclipse编译器(ECJ)?这里有一个关于听起来相关的问题:(可能是重复的)。显然,在Java7中,强制转换的行为发生了一些变化。谢谢,我不会说它是重复的,但我确信它是相关的!关于使用哪种编译器的问题也很重要!链接的问题提到Javac和Eclipse编译器在这里有不同之处。您使用的是哪个版本呢?有趣的是,如果
o
的类型是
Long
,那么转换成功了……您使用的是Javac吗?或者Eclipse编译器(ECJ)?这里有一个关于听起来相关的问题:(可能是重复的)。显然,在Java7中,强制转换的行为发生了一些变化。谢谢,我不会说它是重复的,但我确信它是相关的!关于使用哪种编译器的问题也很重要!链接的问题提到Javac和Eclipse编译器在这里有不同之处。您使用的具体版本是什么?有趣的是,如果
o
的类型是
Long
,则转换成功。。。
d = (double) o;