【问题标题】:ClassCastException when upgrading from Java6 to Java7 due to missing GenericArrayType由于缺少 GenericArrayType 从 Java6 升级到 Java7 时出现 ClassCastException
【发布时间】: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&lt;Integer[]&gt; arr 获取GenericArrayType 吗?

【问题讨论】:

    标签: java generics java-7


    【解决方案1】:

    GenericArrayType 的文档指出它表示一个数组类型,其组件类型是参数化类型或类型变量

    在给定的示例中,数组类型是Integer[]。组件类型Integer 既不是参数化类型也不是类型变量。所以你的数组类型真的不应该用GenericArrayType来表示。

    所以显然 JRE6 的行为是错误的,它得到了修复。对不起。 :(

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 2013-06-10
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多