Java-具有数组的怪异泛型行为

问题描述 投票:0回答:2

我试图用反射实现某种自定义序列化,然后我发现,即使A不是B的子类型,即使数组中的所有元素都是B的子类型,也无法将A[]强制转换为B[] B的子类型(它应该由于类型擦除而起作用,因为在一天结束时a[]b[]均为Object[]。)>

这是我的意思的示例:

public class Foo {
    public static void main(String[] args) throws Exception {
        new Foo().testGenerics();
    }


    public LinkedList<String> strList;
    public String[] strArr;

    public void testGenerics() throws Exception {

        LinkedList<Object> objList = new LinkedList<Object>();
        objList.add("foo");


        Object[] objArr = new Object[1];
        objArr[0] = "bar";

        Foo.class.getField("strList").set(this, objList);

        System.out.println("list[0]  = " + strList.get(0));
        System.out.println("list len = " + strList.size());

        Foo.class.getField("strArr").set(this, objArr);

        System.out.println("arr[0]  = " + strArr[0]);
        System.out.println("arr len = " + strArr.length);

    }

}

在此示例中,列表工作正常,但数组在尝试对其进行设置的行上引发了异常。

数组是否有理由忽略类型擦除,是否有任何好的方法在运行时为给定类型创建数组和列表?

我试图用反射实现某种自定义序列化,然后我发现,即使A不是B的子类型,即使数组中的所有元素都不能将A []强制转换为B []。 ..

java arrays reflection type-erasure
2个回答
2
投票

数组和泛型是完全不同的东西。由于JVM不了解泛型,因此泛型会在运行时删除。但是,JVM does


0
投票

Java中不允许创建通用数组。

© www.soinside.com 2019 - 2024. All rights reserved.