我的 Java 程序中有一个简单的类,它对泛型类型的 BST 进行建模。在这个类中,有一个内部类对 BST 的节点进行建模。
public class Tree<T extends Comparable<T>> {
private class TreeElement {
private T element;
private TreeElement left = null;
private TreeElement right = null;
public TreeElement(T element){
this.element=element;
}
}
public TreeElement root=null;
public void insert(T element) {
if (root==null){
root=new TreeElement(element);
return;
}
//More Code here that is not relevant
}
}
Tree tree = new Tree();
tree.insert(5);
将整数元素插入树中后,我得到以下树对象(来自调试器):
tree = {Tree@1147}
root = {Tree$TreeElement@1157}
element = {Integer@1155} 5
left = null
right = null
this$0 = {Tree@1147}
root = {Tree$TreeElement@1157}
element = {Integer@1155} 5
left = null
right = null
this$0 = {Tree@1147}
只要我继续点击,这种情况就会持续下去,所以它是对其自身的递归引用。
我的问题是:
- 对自身的 this$0 引用从何而来?
- 如何避免这种情况?
根据我的理解,我的树对象应该只有一个具有 3 个属性(元素、左、右)的根对象。
最佳答案
Where does the
this$0-reference
to itself come from?
它来自非静态类。
How do I avoid it?
此引用使您的代码能够引用tree.this
。你无法摆脱它,除非你愿意通过某种替代方式向使用它的方法提供tree.this
(例如,始终将其作为参数传递)。
一旦你弄清楚如何不从代码中引用tree.this
,使TreeElement
类static
将摆脱隐藏的引用到树
。
关于java - Java 中的内部类创建对 self 的引用作为属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48389773/