作者scott0528 (Solar)
看板java
标题[语法] 泛型&巢状类别语法
时间Sun Mar 19 18:12:45 2017
各位前辈好,小弟在写,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://webptt.com/cn.aspx?n=bbs/java/M.1489918372.A.742.html
1F:→ pttworld: 把new好的Node丢进去,要先做new Node的工作 03/19 18:48
2F:→ pttworld: 语法上是C.new Node(....)这样,指定存到某个变数当成 03/19 18:58
3F:→ pttworld: 传进下一new Node的参数next,才串起来 03/19 18:58
4F:→ pttworld: 一开始最尾端当然传null 03/19 18:59