public class LinkedList{
private Nodehead;
private class Node{
E value;
Nodenext;
Node(E value) {
this.value = value;
this.next = head;
head = this;
}
}
public void add(E e) {
new Node(e);
}
public void dump() {
for (Noden = head; n != null; n = n.next)
System.out.print(n.value + " ");
}
public static void main(String[] args) {
LinkedListlist = new LinkedList ();
list.add("world");
list.add("Hello");
list.dump();
}
}
А она не хочет компилиться! Дело в том, что типы
E
разные для класса LinkedList
и класса Node
. Избегайте затенения параметра типа. Авторы говорили об опасности затенения в головоломках 71, 73 и 79. После этого сразу видно, что надо добавить второй параметр конструктору класса Node
и слегка изменить метод add
:public class LinkedList{
private Nodehead;
private class Node{
F value;
Nodenext;
Node(F value, Nodenext) {
this.value = value;
this.next = next;
}
}
public void add(E e) {
this.head = new Node(e, this.head);
}
public void dump() {
for (Noden = head; n != null; n = n.next)
System.out.print(n.value + " ");
}
public static void main(String[] args) {
LinkedListlist = new LinkedList ();
list.add("world");
list.add("Hello");
list.dump();
}
}
Блин, с этими generics, как по минному полю ходишь. Хотя с template классами в C++ тоже не так всё просто...
Комментариев нет:
Отправить комментарий