如何在java中覆盖泛型列表返回类型
发布时间:2020-12-15 05:02:05 所属栏目:Java 来源:网络整理
导读:我试图覆盖返回类型为子类中的列表的方法,如下例所示,由于泛型问题,我无法在子类中执行此操作.我无法改变我的超类代码,所以我如何解决这个问题?任何人都可以指导我…非常感谢提前. 无法更新的超级课程: public class Animal { private String legs; }publi
我试图覆盖返回类型为子类中的列表的方法,如下例所示,由于泛型问题,我无法在子类中执行此操作.我无法改变我的超类代码,所以我如何解决这个问题?任何人都可以指导我…非常感谢提前.
无法更新的超级课程: public class Animal { private String legs; } public class TestSuper { public List<Animal> addAnimals() { return animals; } } 子类: 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; } } 解决方法
如果超级班真的无法更新,我恐怕你根本就不能.
如果您能够更新超类: 在TestSuper中,您将使用公共列表<?延伸动物> 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; } 然后,打电话: List<Dog> dogs = TheClassNameYouChose.cast(animals,Dog.class); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |