这是一个非常简单的案例:我正在尝试将Object类型转换为这样的原语:
Object object = Integer.valueOf(1234);
int result1 = int.class.cast(object); //throws ClassCastException: Cannot convert java.lang.integer to int
int result2 = (int)object; //works fine
这是类'Class'
的强制转换方法的源代码public T cast(Object obj) {
if (obj != null && !isInstance(obj))
throw new ClassCastException(cannotCastMsg(obj));
return (T) obj;
}
private String cannotCastMsg(Object obj) {
return "Cannot cast " + obj.getClass().getName() + " to " + getName();
}
为什么会这样?其他原语也是如此。
答案 0 :(得分:7)
cast
对于原语非常有效...所以它会以拳击结束无论如何。如果您不直接指定int
值,则必须将其装箱。
所以基本上,如果你想转换为int
,只需直接投射。
isInstance
documented始终为基元返回false
:
如果此
Class
对象表示基本类型,则此方法返回false
。
... cast
可能也应该这样。