如何在java中覆盖泛型列表返回类型

Sat*_*tya 3 java generics

我试图覆盖返回类型为子类中的列表的方法,如下例所示,由于泛型问题,我无法在子类中执行此操作.我无法改变我的超类代码,所以我如何解决这个问题?任何人都可以指导我...非常感谢提前.

无法更新的超级课程:

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)