gpt4 book ai didi

扩展时迭代其自身类型的 Java 类

转载 作者:行者123 更新时间:2023-12-01 09:57:16 24 4
gpt4 key购买 nike

我想创建一个仅包含节点的自定义树数据结构,我可以在其中迭代它们。然后,我可以稍后扩展这个类并拥有非常基本的树

class Node{

Node parent;
ArrayList<Node> children;

public static void main(String[]args){
Node root = new Node();
for(Node child : root){
//do something
}
}

public Iterator<Node> iterator(){
// basic tree traversal iterator
}
}

我已经让它工作了,但是当我尝试扩展 Node 类时,问题就出现了。对于扩展类,继承的迭代器方法仍然返回 Node 迭代器,这意味着我每次都必须进行强制转换。这是我遇到的问题的一个基本示例。让我们制作一棵保存整数的树:

class IntegerNode extends Node{

int value;

public static void main(String[]args){

IntegerNode root = new IntegerNode();
int total = 0;

for(IntegerNode child : root){ /* Compiler error, says that the
iterator returns Iterator<Node> and not Iterator<IntegerNode>*/
total+=child.value;
}

System.out.println(total);
}

}

是否有一种简单的方法可以解决此问题,而无需将 iterator() 方法从 Node 类复制到 IntegerNode 类中?

最佳答案

我认为以下内容会起作用(未经测试,所以不是 100% 确定):

class Node<T extends Node<T>> {
public Iterator<T> iterator(){
// basic tree traversal iterator
}
}

class IntegerNode extends Node<IntegerNode> {
public static void main(String[]args) {
IntegerNode root = new IntegerNode();
int total = 0;
for(IntegerNode child : root){
total += child.value;
}

System.out.println(total);
}
}

这基本上是准标准 inheritable builder pattern 的扩展.

关于扩展时迭代其自身类型的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37094913/

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