gpt4 book ai didi

java - 在列表中添加通用对象

转载 作者:行者123 更新时间:2023-12-02 06:17:16 26 4
gpt4 key购买 nike

我有这些类(class)

  • 概念
  • 链接、关系(扩展概念)
  • 概念
  • 链接、关系(应扩展概念)

Concepts 类应该有一个

private List<? extends Concept> list; //or something similar
addConcept(Concept c); // that should work with a (Link) for the class Links

但这按照我尝试的方式不起作用...并且从互联网搜索来看,它看起来不起作用。如何为链接和关系创建一个父类(super class),其中包括将概念插入某种内存持有者。

这...行不通

public class Concepts{
protected List<? extends Concept> list = null;
Concepts(String text) {
}
public void add(Concept test) {
list.add(test);
}
}
public class Links extends Concepts{
Links() {
list = new List<Link>();
}
public void add(Link test) {
list.add(test);
}
}

....我希望(如果可能的话)无法将关系添加到链接或链接到关系中

最佳答案

你无法完成你想要做的事情。您一定想知道为什么不能添加Concept类型的东西给您List<? extends Concept> 。原因如下:

考虑这种情况:

List<? extends Concept> list = new List<Link>();

并且您还有另一个类也扩展了 Concept除此之外Link ,我们称之为 Link2 :

public class Link2 extends Concept { ... }

那么问题来了。如果你这样做怎么办:

Link2 myLink2 = new Link2();
list.add(myLink2);// Big problem, remember that your list was instantiated as a list of Links not Link2s.

这就是为什么您不能将项目添加到这样的通配符类型列表中,因为您可能会尝试向其中添加一些根本无法与实例化的列表类型一起使用的内容。

现在,我对你想做的事情提出建议。使您的基类通用,然后您的扩展类只需指定它将处理的具体类型。像这样的事情:

public class Concepts<T extends Concept> {
private List<T> list = new List<T>();

public void add(T test) {
list.add(test);
}
}

public class Links extends Concepts<Link> {
}

关于java - 在列表中添加通用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21342033/

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