我有这个方法来读取一个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()>
,但它不起作用,所以我不知道从这里到哪里去。
2条答案
按热度按时间wnavrhmk1#
我在考虑使用list.get(0).getClass(),我尝试使用ArrayList〈(list.get(0).getClass()〉
泛型是一种编译时机制,它的目的是允许编译器验证代码中的操作是类型安全的。
在编译
ArrayList<Something>
到ArrayList<Object>
的过程中,这个过程被称为generic type erasure。不能通过方法调用提供泛型类型,如
list.get(0).getClass()
。如果您想从泛型中获益,那么您需要显式地提供泛型类型,并且不能是动态的。
uxh89sit2#
你不能这么做!
想想看,如果你能做到这一点,这是一样的:
ArrayList<Integer> instanceof ArrayList<?>
或ArrayList<Integer> instanceof ArrayList<Number>
Integer
是Number
,这是可以的,但是泛型是不变性,ArrayList<Integer>
不是ArrayList<Number>
。