Из вашего вопроса я понимаю, что ваш код выглядит примерно так
public class LinkedList<T> {
.
.
.
public class Node{
.
.
.
}
}
Тогда вам следует перейти на
private class Node{
private Node next;
private T value;
public Node (T value,Node next){
this.next=next;
this.value=value;
}
}
, а не на другой.Причина в том, что когда вы используете вышеуказанную версию, T
в обоих классах ссылается на аргумент типа, предоставленный при определении объекта, то есть
LinkedList<String> list; // here String is the type argument for both LinkedList and Node
, и вы можете просто создать объекты Node
Node someNode=...
Следовательно, во время компиляции компилятор будет гарантировать, что в Node.value
сохраняются только строковые значения.
Если вы вместо этогоперейдите к другому методу, т.е. Node<T>
, тогда всякий раз, когда вы создаете объекты типа Node
, вам снова придется набирать его, кодируя
Node<T> someNode = new .. // notice the additional type arguments
Это загромождает ваш код ипобить основную цель дженериков.