将List <Animal>转换为List <Dog>

see*_*see 3 java generics

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

我可以知道是否有一种快速简便的方法吗?

List<Dog> dogList = getAnimalList();

public List<Animal> getAnimalList(){
     List<Animal> animalList = new LinkedList<Animal>();
     return animalList;
}
Run Code Online (Sandbox Code Playgroud)

除非绝对必要,否则我不希望再看整个动物名单.

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

kos*_*osa 6

泛型继承与java继承原则略有不同.你需要使用?(通配符)

List<? extends Animal> dogList = getAnimalList();
Run Code Online (Sandbox Code Playgroud)

编辑:

通配符指南:

  1. 使用extends关键字定义带有上限通配符的"in"变量.
  2. 使用super关键字,使用下限通配符定义"out"变量.
  3. 在可以使用Object类中定义的方法访问"in"变量的情况下,使用无界通配符.
  4. 在代码需要作为"in"和"out"变量访问变量的情况下,不要使用通配符.

  • 可能有助于提及通配符所施加的限制. (2认同)