Понимание «неправильно сформированного типа, аргументы типа, заданные для необработанного типа» при использовании типизированного внутреннего класса вне внешнего класса - PullRequest
0 голосов
/ 12 июня 2018

Я немного запутался со следующим и был бы благодарен за помощь.

Что я хотел сделать, так это реализовать общий круговой список, в котором я могу получить доступ к узлам (не их значениям) извне.Я попытаюсь дать минимальную настройку, которая иллюстрирует это.

class CircularList<T>{
    Node<T> first;
    /*Implementation details..., getters, setters */
    public Node<T> getFirst(){ return this.first };

    public class Node<U>{
        /*...*/
    }
}

Использование в другом классе:

CircularList<Vertex> vertices = new CircularList<>();
/*...*/
Node<Vertex> vertex = vertices.getFirst();

В последней строке написано аргументы типа, заданные в rawвведите , чего я не очень понимаю.Я не понимаю, как это сырой тип.Я продумал параметр типа CircularList и тот факт, что getFirst возвращает Node, что тип не будет необработанным, но я, очевидно, ошибаюсь.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вы не указали аргумент для CircularList:

CircularList<Vertex>.Node<Vertex> vertex = vertices.getFirst();

ОБНОВЛЕНИЕ

Но это не имеет большого смысла: вы должны либо объявить класс Node<U>в качестве статического или не указывать какой-либо аргумент для него (и использовать аргумент T включающего класса).

0 голосов
/ 12 июня 2018

Здесь:

public class Node<U>{

Стоит сказать: Node

У вас уже есть универсальный тип T в вашем классе;и очевидно, что CircularList из Ts должен содержать только узлы T.

В основном вы ввели другой параметр второго типа.Что не добавляет ничего, кроме «путаницы».Также обратите внимание, что ваш внутренний класс Node не является статическим, поэтому ничто не мешает вам сказать, что экземпляры Node являются универсальными в T, как класс включающего списка.

Ваш код добавил секунду универсальный параметр без всякой причины.

...