Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 演员名单<;动物>;列出<;狗>;_Java_Generics - Fatal编程技术网

Java 演员名单<;动物>;列出<;狗>;

Java 演员名单<;动物>;列出<;狗>;,java,generics,Java,Generics,我有一个Animal.Class和Dog类,它扩展了Animal.Class 我可以知道是否有一个快速简单的方法来做到这一点吗 List<Dog> dogList = getAnimalList(); public List<Animal> getAnimalList(){ List<Animal> animalList = new LinkedList<Animal>(); return animalList; } Lis

我有一个Animal.Class和Dog类,它扩展了Animal.Class

我可以知道是否有一个快速简单的方法来做到这一点吗

List<Dog> dogList = getAnimalList();

public List<Animal> getAnimalList(){
     List<Animal> animalList = new LinkedList<Animal>();
     return animalList;
}
List dogList=getAnimalList();
公共列表getAnimalList(){
List animalList=new LinkedList();
回归动物主义者;
}
除非绝对必要,否则我不想再看一遍整个动物名单

dog类只包含一个额外的布尔值,用于其他检查目的

与java继承原则没有什么不同。您需要使用
(通配符)


List您的问题并不完全清楚,所以我只想谈谈您可能遇到的问题

如果您有一个包含多种动物的动物列表:

List<Animal> animals = new ArrayList<>();
animals.add(new Dog());
animals.add(new Cat());
animals.add(new Hippo());
列表:

List dogs=Lists.newArrayList(Iterables.filter(animals,Dog.class));

您不应该强制转换整个列表。根据需要将对象强制转换为
Dog
。是否要使
列表包含
Dog
以外的内容?即使可以做到,我也感到不安。@AVD但问题是:“既然狗是动物,如何将列表视为一个列表?”(最初,这种投射的能力似乎是一项有效的/理智的/被接受的/普通的任务……),并且在这方面存在着一系列问题(具有相同的类名)。例如(这些问题/答案看起来很简单):,,,这可能有助于提及通配符施加的限制。顺便说一句,它们被称为“边界”,阅读时
发音为“未知”bounds@Bohemian:在通用代码中,问号(?),称为通配符。扩展类称为定义边界。
List<Animal> animals = new ArrayList<>();
animals.add(new Dog());
animals.add(new Cat());
animals.add(new Hippo());
List<Dog> dogs = new ArrayList<>();

for (Animal animal : animals) {
    if (animal instanceof Dog) {
        dogs.add((Dog)animal);
    }
}
List<Dog> dogs = Lists.newArrayList(Iterables.filter(animals, Dog.class));