Я пытаюсь реализовать дерево, используя вложенный узел, который сам имеет массив узлов. (см. следующий код) Когда я создаю экземпляр и отлаживаю его, я вижу ссылку внутри начального узла, который называется этим $ 0, в основном это та же ссылка, что и само экземплярное дерево. Мне было интересно, может ли кто-нибудь сказать мне, почему он есть, и какую цель он служит (если это не из-за некоторой ошибки в коде). Благодарю.
public class NodeTree {
private Node start;
private int degree;
public NodeTree() {
start = new Node();
}
private class Node {
private Object root;
private Node[] subtrees;
private int size;
Node() { }
}
}
Когда вы видите this$_something_
в отладчике, это означает, что ваш класс имеет ссылку на объект внешнего класса. Эта ссылка создается автоматически компилятором.
В вашем коде это происходит потому, что Node
- это нестатический класс, который вложен в класс NodeTree
. Это означает, что он получает ссылку на свой внешний объект, то есть NodeTree
устанавливается автоматически.
Если вы не хотите этого поведения, сделайте Node
static в NodeTree
или переместите его, чтобы сделать его классом верхнего уровня:
public class NodeTree {
private Node start;
private int degree;
public NodeTree() {
start = new Node();
}
static private class Node {
// ^^^^^^
private Object root;
private Node[] subtrees;
private int size;
Node() { }
}
}
Node
нестатичным, если бы вам нужно было получить доступ к некоторому включающемуNodeTree
объектуNodeTree
- например, к полюstart
.