gpt4 book ai didi

java泛型与ArrayList

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:25 26 4
gpt4 key购买 nike

我有java泛型相关的问题

我有一个名为 Container 的家长类(class)如下所示:容器可以包含其他容器和 Services 。 Services 类扩展了 Container 但只能包含 ServiceMembers它还扩展了 Container。

即使在 Services 类中我覆盖了父类的 getElements(),下面的代码也不起作用。方法并返回一个 ArrayList 元素,这些元素也是 Container 类的子类。

知道如何让它发挥作用,或者我只是以错误的方式使用它?

public class Container
{
protected ArrayList<Container> elements = new ArrayList<Container>();

public ArrayList<Container> getElements()
{
}
}

public class Service extends Container
{
public ArrayList<ServiceMember> getElements()
{
}
}

最佳答案

我认为你只需要像这样修改Container类:

public class Container<T extends Container> {
protected List<T> elements = new ArrayList<T>();

public List<T> getElements() {
return elements;
}
}

这将允许您使用 Container 类(或其本身)的所有子类对其进行参数化。

Service 类如下所示:

public class Service extends Container<Service> {

}

最后,您可以像这样实例化这些类的对象:

Service s = new Service();
ArrayList<Service> elements = s.getElements();

Container<Container> c = new Container<Container>();
ArrayList<Container> els = c.getElements();

//adding an element to each of the lists:
c.getElements().add(new Container<Container>());
System.out.println(c.getElements().size());

s.getElements().add(new Service());
System.out.println(s.getElements().size());

无论如何,我建议您在设计时仔细考虑,因为将原始类与泛型混合是不安全且令人困惑的。

关于java泛型与ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641355/

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