ome*_*ega 3 java generics polymorphism types
在java中,我想创建一个函数,它接受任何类型的内容列表,然后返回相同类型的数组.我到目前为止
public static <T>[] listToArray(List<T> items) {
<T>[] names = new <T>[items.size()];
for(int i=0; i<items.size(); i+=1) {
names[i] = items.get(i);
}
return names;
}
Run Code Online (Sandbox Code Playgroud)
但这有很多语法错误......
有谁知道如何做到这一点?
谢谢
来自Bloch的Effective Java,第25项:
...数组和泛型具有非常不同的类型规则.数组是协变的和具体化的; 泛型是不变的和擦除的.因此,数组提供运行时类型安全性,但不提供编译时类型安全性,反之亦然.一般来说,数组和泛型不能很好地混合.如果你发现自己混合它们并得到编译时错误或警告,你的第一个冲动应该是用列表替换数组.
说明:
数组是协变的意思是如果类Dog扩展了类,Animal那么你可以这样做:
Animal[] animals = new Animal[5];
animals[0] = new Dog();
Run Code Online (Sandbox Code Playgroud)
同样不适用于泛型,因为泛型是不变的:
List<Animal> animals = new LinkedList<Animal>();
animals.add(new Dog()); // compilation error!!!
Run Code Online (Sandbox Code Playgroud)
数组的实现意味着有关数组类型的所有信息在运行时和编译时都可用.同样,泛型被擦除,这意味着类型信息仅在编译期间存在.
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |