我想创建一个自定义的树数据结构,只有节点,我可以迭代他们。然后,我可以扩展这个类,并有非常基本的树
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类时,问题就来了。对于扩展类,继承的迭代器方法仍然返回节点迭代器,这意味着我每次都要强制转换。下面是我遇到的问题的一个基本示例。让我们建立一个包含整数的树:
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);
}
}
这基本上是准标准可继承构建器模式的扩展。
我试图为自己的泛型类编写自己的迭代器。我一直在看几个YouTube教程,在网上搜索。 IntelliJ指出的问题是,我不能像我试图的那样在迭代器类中使用getleft和getright,因为非静态方法不能从静态上下文中引用。我一直在研究静态和更多,但无法解决这个问题。我是完全走错了路,还是至少我的方法有点接近? 运行时: 我遇到了一个无休止的循环,打印5。因此,迭代器本身可以工作,但我的方法有一个
问题内容: 假设我们需要使用一个名为“ BaseNode”的类来实现不同类型的树,从该类派生其他类型的Node,并且它假定具有一个自己类型的实例变量,通常看起来像这样: 现在,如果我要为具有更多成员的AVL树派生Node: 原始(&)节点成员仍然会类型我实施AVL树,其防止。谁能告诉我如何解决这一继承问题?谢谢! 问题答案: 解决方案1- 每次访问时,都将其转换为。您可以在其中编写访问器以使其更加
问题内容: 我正在阅读另一个SO问题,即Swift do-try-catch语法。在他的回答中, rickster 为OP的自定义类创建了扩展。 Konrad77 评论说,这是“保持代码整洁的好方法。” 我尊重他们的知识,这使我相信我在自己的代码中遗漏了一点。 除了为我创建的类创建扩展之外,还有其他好处(除了整洁)还是原因?我可以将相同的功能直接放入类中。如果我是唯一使用该类的人,或者其他人将使用
我正试图用三个额外的日期(时间戳)字段扩展扩展扩展名(新闻),并希望在(新闻)的fluidtemplate中调用这些字段。 我已经连线到目前为止,我可以看到我的后端额外的字段,而无需选择一个外部类型-我已经相应地修改了ext_tables.php,并可以保存数据。 现在,我试图在我的新闻流模板中使用这些字段,在我的Partials/List/Item中使用以下代码。html-{newsItem.d
问题内容: 我偶然发现了对Java继承的好奇心,我希望您对此提出更好的想法: 假设两个接口A和A1 接口A1扩展了A 接口A具有返回泛型类型的方法。 通用类型将是。 现在的基本思想是将这种通用返回类型从接口A中更改 为 接口A1中的 一开始似乎很容易(不好的事情会在以后出现) 我们将接口A声明为 和接口A1一样 如您所见,我们被迫编写接口A本身,以允许使用基于泛型的“子类”覆盖它。(实际上,gen
问题内容: Java是否可以让类扩展泛型,以便您可以将方法注入通过代码传递的任何类中?(或者是否有其他方法可以使用Java将方法注入或重写到现有类中?) 我所说的“扩展通用类型”是这样的(类“ Textended GameObject”属于游戏,可能不会更改,并且是未知的,因为它是在运行时(从其他mods)加载到游戏中的): onTick由GameEngine调用,通过这种方式,我可以将每个现有的