首页 > 解决方案 > 使用原始包装器进行 Java 强制转换 - Java 6 和 Java 8 之间的区别

问题描述

我遇到了这段遗留代码(Java 6)(这是指出我的问题的简化版本):

Object o;
o = new Long (3L);
Double d;
d = (Double) o;

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

Long toConvert = (Long) o;
String convert = toConvert.toString();
d= Double.parseDouble(convert);

它工作正常,除了丑陋。我尝试了另一种解决方案:

d = (double) o;

我也工作得很好,但是当我在新的 Java 8 项目中检查这个解决方案(纯粹的好奇心)时,我得到了

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

在原始包装器方面,Java 6 与 Java 8 有什么不同,可以解释观察到的行为吗?

标签: javacastingwrapperprimitive

解决方案


推荐阅读