创建子类时出现 StackOverflowError
StackOverflowError when making a subclass
我的超类:
public class Node {
public MyPoint myPoint = new MyPoint();
}
我的空子类:
public class MyPoint extends Node {
}
下面的问题与我能找到的问题最接近,但是在这种情况下,我的子类是空的,没有构造函数。
我收到以下错误:
Exception in thread "JavaFX Application Thread" java.lang.WhosebugError
...
at engine.MyPoint.<init>(MyPoint.java:3)
at engine.Node.<init>(Node.java:28)
at engine.MyPoint.<init>(MyPoint.java:3)
at engine.Node.<init>(Node.java:28)
at engine.MyPoint.<init>(MyPoint.java:3)
at engine.Node.<init>(Node.java:28)
...
我不明白为什么以及如何没有递归,正如我所看到的那样。
这个怎么样
public MyPoint myPoint = new MyPoint();
与此不同(例如在 JavaFX 中),创建新组时不会出现错误?
public Group group = new Group();
MyPoint
扩展了 Node
,因此当您创建 MyPoint
的实例时,您首先必须初始化其父级 Node
。这意味着初始化 myPiont
成员,依此类推,直到获得 WhosebugError
.
这里没有足够的上下文来建议更改,但你可能会失去这个成员。
如果您的节点 class 绝对需要 MyPoint 字段,您有几个选择:
- 您完全确定 MyPoint 需要从 Node 扩展吗?它实际上是节点生物吗?如果没有,摆脱这个,问题就解决了。如果是这样,那么还有其他修复....
- MyPoint 不是对每个 Node 实例都是唯一的吗?如果不是,将其设为静态字段,问题就解决了。我怀疑是这样,导致我们...
- 如果MyPoint绝对需要从Node扩展,和需要对每个Node实例都是唯一的,那么你必须传入引用,意思是改变这个:
public class Node {
public MyPoint myPoint = new MyPoint();
}
对此:
public class Node {
public MyPoint myPoint; // note that MyPoint NOT created here
public Node(MyPoint myPoint) {
this.myPoint = myPoint; // but rather passed in HERE
}
}
这样您就不会在每次创建 Node 时都递归创建 Node 对象,而是将 MyPoint 实例的创建与 Node 实例分开。或者,这也可以使用 setter 方法解决。
我的超类:
public class Node {
public MyPoint myPoint = new MyPoint();
}
我的空子类:
public class MyPoint extends Node {
}
下面的问题与我能找到的问题最接近,但是在这种情况下,我的子类是空的,没有构造函数。
我收到以下错误:
Exception in thread "JavaFX Application Thread" java.lang.WhosebugError
...
at engine.MyPoint.<init>(MyPoint.java:3)
at engine.Node.<init>(Node.java:28)
at engine.MyPoint.<init>(MyPoint.java:3)
at engine.Node.<init>(Node.java:28)
at engine.MyPoint.<init>(MyPoint.java:3)
at engine.Node.<init>(Node.java:28)
...
我不明白为什么以及如何没有递归,正如我所看到的那样。 这个怎么样
public MyPoint myPoint = new MyPoint();
与此不同(例如在 JavaFX 中),创建新组时不会出现错误?
public Group group = new Group();
MyPoint
扩展了 Node
,因此当您创建 MyPoint
的实例时,您首先必须初始化其父级 Node
。这意味着初始化 myPiont
成员,依此类推,直到获得 WhosebugError
.
这里没有足够的上下文来建议更改,但你可能会失去这个成员。
如果您的节点 class 绝对需要 MyPoint 字段,您有几个选择:
- 您完全确定 MyPoint 需要从 Node 扩展吗?它实际上是节点生物吗?如果没有,摆脱这个,问题就解决了。如果是这样,那么还有其他修复....
- MyPoint 不是对每个 Node 实例都是唯一的吗?如果不是,将其设为静态字段,问题就解决了。我怀疑是这样,导致我们...
- 如果MyPoint绝对需要从Node扩展,和需要对每个Node实例都是唯一的,那么你必须传入引用,意思是改变这个:
public class Node {
public MyPoint myPoint = new MyPoint();
}
对此:
public class Node {
public MyPoint myPoint; // note that MyPoint NOT created here
public Node(MyPoint myPoint) {
this.myPoint = myPoint; // but rather passed in HERE
}
}
这样您就不会在每次创建 Node 时都递归创建 Node 对象,而是将 MyPoint 实例的创建与 Node 实例分开。或者,这也可以使用 setter 方法解决。