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之间的关系是什么?