由于缺少GenericArrayType,从Java6升级到Java7时发生ClassCastException

由于缺少GenericArrayType,从Java6升级到Java7时发生ClassCastException,java,generics,java-7,Java,Generics,Java 7,我的代码在Java5和Java6中运行,但是当我升级到Java7时,我得到了一个“Java.lang.ClassCastException:Java.lang.Class不能转换为Java.lang.reflect.GenericaryType” 对于以下代码: public class A<T> { public Vector<Integer[]> arr; } System.out.println(((ParameterizedType)A.class.getF

我的代码在Java5和Java6中运行,但是当我升级到Java7时,我得到了一个“Java.lang.ClassCastException:Java.lang.Class不能转换为Java.lang.reflect.GenericaryType”

对于以下代码:

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());
Java7打印:

class [Ljava.lang.Integer;
class java.lang.Class

这种不同的行为破坏了我依赖泛型的代码。有人能帮我理解为什么会发生这种情况,以及如何从
向量arr
中获取吗?

genericaraytype的文档说明它表示一种数组类型,其组件类型为参数化类型或类型变量

在给定的示例中,数组类型为
Integer[]
。组件类型,
Integer
,既不是参数化类型,也不是类型变量。因此,您的数组类型真的不应该由
GenericArrayType
表示

显然,JRE6的行为是有缺陷的,它得到了修复。对不起(

Java bug描述了类似的情况。我发现Java 6和Java 7之间的行为发生了这种变化。可以对其进行编码,但这是一种痛苦。
class [Ljava.lang.Integer;
class java.lang.Class