加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何在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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读