我的Java程序中有一个简单的类,用于模拟泛型类型的BST。在这个类中有一个内部类,它模拟BST的节点。
$stmt->bindValue('pi_classroom_id', null, 'string');
$stmt->bindValue('pi_classroom_name', $pi_classroom_name, 'string');
// ...
在我的Tree中插入Integer-Element后,我得到以下Tree对象(来自调试器):
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);
只要我一直点击,这就会继续下去,所以它是对自身的递归引用。
我的问题是:
根据我的理解,我的树对象应该只有一个具有3个属性的根对象(元素,左,右)。
答案 0 :(得分:2)
this$0-reference
本身来自哪里?
它来自非静态类。
我该如何避免呢?
此参考使您的代码能够引用tree.this
。你无法摆脱它,除非你愿意通过某种替代方式向tree.this
提供使用它的方法(例如,将它作为参数一直传递)。
一旦你弄清楚如何不从你的代码中引用tree.this
,那么TreeElement
类static
将会删除对Tree
的隐藏引用。
答案 1 :(得分:0)
这不是“自我的递归参考”。它是对通过其创建内部类对象的外部类的实例的非递归引用。您可以通过将内部类更改为静态来摆脱它,但如果从其中访问外部类的成员,这将导致其他代码问题。例如tree.this
。
这不是问题,所以你不需要解决它。