使用'cast'方法将Integer转换为int时的Autoboxing / Unboxing

时间:2015-10-10 09:33:20

标签: java casting autoboxing

这是一个非常简单的案例:我正在尝试将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();
}

为什么会这样?其他原语也是如此。

Live Example

1 个答案:

答案 0 :(得分:7)

由于Java中的泛型,因为它无法返回实际原始类型的值,所以

cast对于原语非常有效...所以它会以拳击结束无论如何。如果您不直接指定int值,则必须将其装箱。

所以基本上,如果你想转换为int,只需直接投射。

isInstance documented始终为基元返回false

  

如果此Class对象表示基本类型,则此方法返回false

... cast可能也应该这样。