это $ 10 Tree с использованием Node Array

1

Я пытаюсь реализовать дерево, используя вложенный узел, который сам имеет массив узлов. (см. следующий код) Когда я создаю экземпляр и отлаживаю его, я вижу ссылку внутри начального узла, который называется этим $ 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() {  }      
    }
}
Теги:
reference
tree
nested

1 ответ

1
Лучший ответ

Когда вы видите 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() {  }
    }
}
  • 1
    благодарю вас! Я нашел кое-что о нем, и он говорит, что он должен быть нестатичным, только если его экземпляры должны иметь доступ к нестатическим членам своего включающего класса. Будет ли это примером, если внутренний класс Node должен выполнить вычисление и, таким образом, получить доступ к полям окружающего класса? благодарю вас
  • 1
    @ NaC114 Вы бы сделали Node нестатичным, если бы вам нужно было получить доступ к некоторому включающему NodeTree объекту NodeTree - например, к полю start .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню