假设有以下代码:
@SuppressWarnings("unchecked")
public static <T> T implicitCaster(Class<T> cls, Object o) {
return (T) o;
}
public static <T> T reflectionCaster(Class<T> cls, Object o) {
return cls.cast(o);
}
代码在这两种情况下都按预期工作,但在原语中发现了以下异常:
public static void main(String[] args) {
System.out.println(implicitCaster(int.class, 42));
System.out.println(reflectionCaster(int.class, 42));
}
第一个调用按预期工作,但第二个调用 throws java.lang.ClassCastException
。
这是忽略自动装箱的极端情况吗?或者在这种情况下,反射投射是否不可能提供自动装箱?还是有其他原因导致这种不一致?
编辑:调用此代码按预期工作:
public static void main(String[] args) {
System.out.println(implicitCaster(Integer.class, 42));
System.out.println(reflectionCaster(Integer.class, 42));
}