2015-11-29 3 views
1

Как объявить переменную типа Node? Узел является внутренним классом LinkedList, и в моем основном методе программы, которую я пишу, я хочу создать переменную Node. Но в заключительной строке в фрагменте кода ниже я получаю сообщение об ошибке «Nose имеет личный доступ в LinkedList». Почему я не могу использовать тип узла?Как вы объявляете тип узла из класса LinkedList в Java?

import java.util.LinkedList; 

public class MinSplit { 
    public static long leastAmount; 

public static void main(String args[]) { 
    LinkedList list = new LinkedList(); 
    LinkedList.Node node = new LinkedList.Node(); 
+0

В Java мы используем Generics для определения типов узлов. –

ответ

1

Почему я не могу использовать Node типа?

Потому что объявлено как private. Это внутренняя деталь реализации класса LinkedList, и у вас не должно быть причин создавать экземпляры. Понятно, что это было преднамеренное дизайнерское решение со стороны команды Java, которая призвана очистить API и избежать проблем, вызванных тем, что люди нарушают структуру данных списка.

Если вы хотите создать экземпляр класса Node, чтобы вы могли выполнять какие-то операции на LinkedList, подумайте еще раз. Ни один из публичных API не раскрывает тип Node таким образом, чтобы вы могли добавить Node в LinkedList ... или использовать его любым другим способом. Вероятно, вам нужно реализовать свой собственный класс связанных списков ... с нуля.

Если вы хотите, чтобы класс Node использовался для других целей, вам следует объявить новый класс или найти подходящий класс в сторонней библиотеке.


На самом деле, если вы готовы Р.И. быть противным, можно разбить типа абстракции с помощью отражения. Можно создать классы private, вызвать методы private и получить доступ/обновить поля private. Но это действительно плохая идея. Для начала, если Oracle решает изменить класс, ваши рефлексивные хаки могут сломаться.

0

Node это класс, который используется внутри LinkedList класса для хранения значения каждого узла в LinkedList и определяется как частное класса, следовательно, вы не можете ссылаться на него из-за пределов класса.

Определенный тип узла для таких классов, как LinkedList в Java, мы используем Generics. Вы можете определить свою переменную, как показано ниже:

Смежные вопросы