我试图覆盖返回类型为子类中的列表的方法,如下例所示,由于泛型问题,我无法在子类中执行此操作.我无法改变我的超类代码,所以我如何解决这个问题?任何人都可以指导我...非常感谢提前.
无法更新的超级课程:
public class Animal {
private String legs;
}
public class TestSuper {
public List<Animal> addAnimals() {
return animals;
}
}
Run Code Online (Sandbox Code Playgroud)
子类:
public class Dog extends Animal {
private String sound;
}
public class TestSub extends TestSuper {
public List<Dog> addAnimals() { --> I need to override this method but want return type as List of dogs
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
sp0*_*00m 11
如果超级班真的无法更新,我恐怕你根本就不能.
如果您能够更新超类:
在TestSuper,你可以使用public List<? extends Animal> addAnimals()而不是public List<Animal> addAnimals().
你有什么其他解决方案:
您可以使用这样的实用方法:
@SuppressWarnings("unchecked")
public static <T extends Animal> List<T> cast(List<Animal> animals, Class<T> subclass) {
List<T> out = new ArrayList<T>();
for (Animal animal : animals) {
if (!subclass.isAssignableFrom(animal.getClass())) {
// the "animal" entry isn't an instance of "subclass"
// manage this case however you want ;)
} else {
out.add((T) animal);
}
}
return out;
}
Run Code Online (Sandbox Code Playgroud)
然后,打电话:
List<Dog> dogs = TheClassNameYouChose.cast(animals, Dog.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5760 次 |
| 最近记录: |