采用以下泛型示例
import java.util.List;
import java.util.ArrayList;
public class GenericsTest {
private List<Animal> myList;
public static void main(String args[]) {
new GenericsTest(new ArrayList<Animal>()).add(new Dog());
}
public GenericsTest(List<Animal> list) {
myList = list;
}
public void add(Animal a) {
myList.add(a);
}
public interface Animal {}
public static class Dog implements Animal {}
public static class Cat implements Animal {}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是如你所知,你不能用它构建它
new GenericsTest(new ArrayList<Dog>());
Run Code Online (Sandbox Code Playgroud)
因为,如你所知,add(Animal)可以添加Cat
s.该建议解决这个问题的方法,即使用通配符也不管用,因为,是的,你可以改变每一个List<Animal>
中List<? extends Animal>
却有着同样的问题:你可以创建GenericsTest
与List<Cat>
再添加Dog
秒.
所以我的问题是:有没有一种方便的方法来编写这个类一次,然后将它用于所有可能的Animals
?当然它应该直接解决上述问题.
如果我理解你要做什么,那么你需要将泛型类型放在类级别:
public class GenericsTest<T extends Animal>
{
private List<T> myList;
public static void main(String args[])
{
new GenericsTest<Dog>(new ArrayList<Dog>());
}
public GenericsTest(List<T> list)
{
myList = list;
}
public void add(T a)
{
myList.add(a);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2405 次 |
最近记录: |