【发布时间】:2015-05-13 15:12:05
【问题描述】:
我正在尝试使用 Class.cast () 将盒装 Double 转换为原始双精度:
Object d = 1.0d;
Class<?> clazz = double.class;
//the bellow line throws java.lang.ClassCastException:
//Cannot cast java.lang.Double to double
clazz.cast(d);
我这样做是因为在我的代码的某些部分中,值对象和类是动态给出的,并且我确实保证值对象是兼容类型。但是这个例外真的让我很困惑。使用 cast() 的约定是什么?
更新我遇到了这个,因为我们有这样的代码:
interface Provider <T> {
T get ();
Class<T> getClazz();
}
//a special handling for double primitive
class DoubleProvider implements Provider<Double> {
public double getDouble(){
return 1.0d;
}
@Override
public Double get() {
return getDouble();
}
@Override
public Class<Double> getClazz() {
//why this actually compiles?
return double.class;
}
}
如果 double 和 Double 如此不同以至于它们都不能被认为以任何方式赋值,为什么 java 允许 DoubleProvider 中的 getClazz() 方法进行编译? double.class 和 Double.class 是什么关系?
【问题讨论】:
-
您不能以这种方式将包装类转换为原语。自动装箱和铸造是not the same thing。
标签: java