我试图用反射实现某种自定义序列化,然后我发现,即使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 []。 ..
数组和泛型是完全不同的东西。由于JVM不了解泛型,因此泛型会在运行时删除。但是,JVM does
Java中不允许创建通用数组。