Rav*_*i M 8 java generics java-7
我的代码在Java 5和6中运行,但是当我升级到Java 7时,我得到一个"java.lang.ClassCastException:java.lang.Class不能转换为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());
Run Code Online (Sandbox Code Playgroud)
Java6打印:
java.lang.Integer[]
class sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl
Run Code Online (Sandbox Code Playgroud)
Java7打印:
class [Ljava.lang.Integer;
class java.lang.Class
Run Code Online (Sandbox Code Playgroud)
这种不同的行为破坏了我依赖于泛型的代码.是否有人可以帮助我理解为什么会这样,以及如何获得GenericArrayType从Vector<Integer[]> arr?
GenericArrayType状态的文档它表示一种数组类型,其组件类型是参数化类型或类型变量.
在给定的示例中,数组类型是Integer[].组件类型Integer既不是参数化类型也不是类型变量.所以你的数组类型真的不应该由a表示GenericArrayType.
所以显然JRE6的行为是错误的并且它得到修复.抱歉.:(