Autoboxing/Unboxing 使用 'cast' 方法将 Integer 转换为 int
Autoboxing/Unboxing while casting Integer to int using 'cast' method
这是一个非常简单的案例:我正在尝试将 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'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();
}
为什么会这样?其他原语也发生了同样的情况。
cast
不能很好地用于基元,因为它不能 return 实际基元类型的值,由于 Java 中的泛型...所以无论如何它最终都会再次拳击。如果您不直接分配给 int
值,则也必须出于这个原因将其装箱。
所以基本上,如果你想转换为int
,直接转换即可。
isInstance
是 documented 总是 return false
对于原语:
If this Class
object represents a primitive type, this method returns false
.
...cast
应该也是。
这是一个非常简单的案例:我正在尝试将 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'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();
}
为什么会这样?其他原语也发生了同样的情况。
cast
不能很好地用于基元,因为它不能 return 实际基元类型的值,由于 Java 中的泛型...所以无论如何它最终都会再次拳击。如果您不直接分配给 int
值,则也必须出于这个原因将其装箱。
所以基本上,如果你想转换为int
,直接转换即可。
isInstance
是 documented 总是 return false
对于原语:
If this
Class
object represents a primitive type, this method returnsfalse
.
...cast
应该也是。