【发布时间】:2015-10-10 09:33:20
【问题描述】:
这是一个非常简单的案例:我正在尝试将 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'的cast方法的源代码
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();
}
为什么会这样?其他原语也是如此。
【问题讨论】:
-
好吧,
isInstance的文档指定:“如果这个 Class 对象表示原始类型,则此方法返回 false。”所以这并不奇怪 - 但cast文档应该说它对于原始类型总是会失败。 -
所以我不应该对基元使用强制转换方法,而是直接使用 (int) 进行强制转换?
-
@AnmolGupta:是的,基本上。
标签: java casting autoboxing