gpt4 book ai didi

java - 你如何在 java 中处理 "super"泛型?

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:45 25 4
gpt4 key购买 nike

以下面的泛型为例

import java.util.List;
import java.util.ArrayList;

public class GenericsTest {
private List<Animal> myList;

public static void main(String args[]) {
new GenericsTest(new ArrayList<Animal>()).add(new Dog());
}

public GenericsTest(List<Animal> list) {
myList = list;
}

public void add(Animal a) {
myList.add(a);
}

public interface Animal {}
public static class Dog implements Animal {}
public static class Cat implements Animal {}
}

它工作正常。但是如您所知,您不能用

new GenericsTest(new ArrayList<Dog>());

因为,如您所知,add(Animal) 可以添加 Cat秒。 建议的解决此问题的方法,即通配符也不起作用,因为,是的,您可以更改每个 List<Animal>List<? extends Animal>但它有同样的问题:您可以创建 GenericsTestList<Cat>然后添加 Dog

所以我的问题是:有没有一种方便的方法来编写一次这个类,然后将它用于所有可能的Animals ?当然应该直接解决上面提到的问题。

最佳答案

如果我理解你想要做什么,那么你需要将泛型类型放在类级别:

public class GenericsTest<T extends Animal>
{
private List<T> myList;

public static void main(String args[])
{
new GenericsTest<Dog>(new ArrayList<Dog>());
}

public GenericsTest(List<T> list)
{
myList = list;
}

public void add(T a)
{
myList.add(a);
}
}

关于java - 你如何在 java 中处理 "super"泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/223902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com