gpt4 book ai didi

java - Java 中的通用通配符

转载 作者:行者123 更新时间:2023-11-30 11:28:17 25 4
gpt4 key购买 nike

我正在编写一个通用类:

public class Node<T> {
private Node<T> parent = null;
private List<? extends Node<T>> children = null;

public Node<T> getParent() {
return parent;
}

public void setParent(Node<T> parent) {
if(this.parent != null){
// Remove current parent's children references
this.parent.getChildren().remove(this);
}

// Add references
this.parent = parent;
parent.getChildren().add(this);
}

public List<? extends Node<T>> getChildren() {
return children;
}
}

我想要一些其他的类来继承这个节点。无法编译此代码并在行 parent.getChildren().add(this); 上显示错误.因为我用 List<? extends Node<T>> 声明了 getChildren()作为返回类型,'this' 是类型 Node<T> .

有什么办法可以解决吗?

最佳答案

将列表声明为:

List<Node<T>> children

您仍然可以将子类的实例放在列表中。

如果您将其保留为未知类型,编译器将无法确保 它属于哪个类。例如,它可能被键入为 SubClassA,但您正在添加 SubClassB,它无法根据声明的类型知道,这是编译器必须继续进行的所有工作。在运行时,虽然列表和子项的类型可能匹配,但编译器无法断言。

关于java - Java 中的通用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939256/

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