[語法] 泛型&巢狀類別語法

看板java作者 (Solar)時間7年前 (2017/03/19 18:12), 編輯推噓0(004)
留言4則, 1人參與, 最新討論串1/1
各位前輩好,小弟在寫,Duck,Duck,Goose的遊戲(從資料結構的書上練習題而來)。 但是碰到泛型還有巢類別的語法問題如下。請直接跳到程式最下面(倒數第五行)的中文註 解。 import java.util.Random; public class CircularlyLinkedList <E> { private static class Node<E> { private E element; private Node<E> next; public Node(E e, Node<E> n) { element = e; next = n; } public E getElement( ) { return element; } public Node<E> getNext( ) { return next; } public void setNext(Node<E> n) { next = n; } } // instance variables of the CircularlyLinkedList private Node<E> tail = null; private int size = 0; public CircularlyLinkedList( ) { } // access methods public int size( ) { return size; } public boolean isEmpty( ) { return size == 0; } public E first( ) { if (isEmpty( )) return null; return tail.getNext( ).getElement( ); ///??? } public E last( ) { if (isEmpty( )) return null; return tail.getElement( ); } // update methods public void rotate( ) { if (tail != null) tail = tail.getNext( ); } public void addFirst(E e) { if (size == 0) { tail = new Node<>(e, null); tail.setNext(tail); } else { Node<E> newest = new Node<>(e, tail.getNext( )); tail.setNext(newest); } size++; } public void addLast(E e) { addFirst(e); tail = tail.getNext( ); } public E removeFirst( ) { if (isEmpty( )) return null; Node<E> head = tail.getNext( ); if (head == tail) tail = null; else tail.setNext(head.getNext( )); size--; return head.getElement( ); } public static void main(String[] args) { CircularlyLinkedList C = new CircularlyLinkedList(); String names []={"Scott", "Andy","Cool", "Check"}; for (int i=0; i<names.length ; i++) { C.Node<String,Node<String>>(names[i],"aa" ); ///上面這一行一直有語法問題 } } } 問題一:上網爬文,巢狀類別可以忽略它的存在,要用朝狀類別裡面的方法(第八行), Node(E e, Node<E> n), 直接指向主類別(第二行),CircularlyLinkedList,建立物件 ,C,然後就如倒數第五行一樣使用,C.Node。請問我這樣的理解正確嗎? 問題二:第八行的方法使用了泛型,網路查了一下,要針對我所設定的泛型給予型態, 才能夠使用。所以倒數第五行我針對,E,指定了String型態,Node<E>,也指定了String 型態。我覺得應該是這裡錯,但我不知道該怎麼寫這樣的語法。 問題三:我的認知這裡的Node<E>算是型態,就類似Int or Char之類的,那裏面的E 又代表什麼。有點亂了。 以上問題還請前輩們指點。感謝前輩們幫忙。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.95.199 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1489918372.A.742.html

03/19 18:48, , 1F
把new好的Node丟進去,要先做new Node的工作
03/19 18:48, 1F

03/19 18:58, , 2F
語法上是C.new Node(....)這樣,指定存到某個變數當成
03/19 18:58, 2F

03/19 18:58, , 3F
傳進下一new Node的參數next,才串起來
03/19 18:58, 3F

03/19 18:59, , 4F
一開始最尾端當然傳null
03/19 18:59, 4F
文章代碼(AID): #1OpbcaT2 (java)