【发布时间】:2012-07-27 13:03:17
【问题描述】:
我的代码在 Java 5 和 6 中运行,但是当我升级到 Java 7 时,我得到一个“java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.GenericArrayType”。
对于以下代码:
public class A<T> {
public Vector<Integer[]> arr;
}
System.out.println(((ParameterizedType)A.class.getField("arr").getGenericType()).getActualTypeArguments()[0]);
System.out.println(((ParameterizedType) A.class.getField("arr").getGenericType()).getActualTypeArguments()[0].getClass());
Java6 打印:
java.lang.Integer[]
class sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl
Java7 打印:
class [Ljava.lang.Integer;
class java.lang.Class
这种不同的行为破坏了我依赖泛型的代码。有人可以帮我理解为什么会发生这种情况以及如何从Vector<Integer[]> arr 获取GenericArrayType 吗?
【问题讨论】: