java 如何获取数组列表类型并基于此创建数组列表?

e4eetjau  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(107)

我有这个方法来读取一个txt文件。首先它把**.txt**文件转换成一个Object,然后检查它是否是一个ArrayList。如果是,我想创建一个任何类型的对象的ArrayList

public static readFile(String fileName) {
        Object obj = null;
        
        try {
            obj = deserialize(fileName);
        } catch (IOException e) {
            return null;
        } catch (ClassNotFoundException e) {
            return null;
        }

        ArrayList<?> list;

        if (obj instanceof ArrayList<?>) {
            list = (ArrayList<?>) obj;
        } else {
            return null;
        }

        return null;
    }

我知道ArrayList的所有元素在我的场景中都是相同的类型,所以我考虑使用list.get(0).getClass()。我尝试使用ArrayList<(list.get(0).getClass()>,但它不起作用,所以我不知道从这里到哪里去。

wnavrhmk

wnavrhmk1#

我在考虑使用list.get(0).getClass(),我尝试使用ArrayList〈(list.get(0).getClass()〉
泛型是一种编译时机制,它的目的是允许编译器验证代码中的操作是类型安全的。
在编译ArrayList<Something>ArrayList<Object>的过程中,这个过程被称为generic type erasure
不能通过方法调用提供泛型类型,如list.get(0).getClass()
如果您想从泛型中获益,那么您需要显式地提供泛型类型,并且不能是动态的。

uxh89sit

uxh89sit2#

你不能这么做!
想想看,如果你能做到这一点,这是一样的:
ArrayList<Integer> instanceof ArrayList<?>ArrayList<Integer> instanceof ArrayList<Number>
IntegerNumber,这是可以的,但是泛型是不变性ArrayList<Integer>不是ArrayList<Number>

相关问题