2015-03-02 56 views
0
public final class ImmutableList<E> { 

    public final E head; 
    public final ImmutableList<E> tail; 

    public ImmutableList() { 
     this.head = null; 
     this.tail = null; 
    } 

    private ImmutableList(E head, ImmutableList<E> tail) { 
     this.head = head; 
     this.tail = tail; 
    } 

我知道public final E head被宣佈從一般的尖E一個屬性,這個語法是我熟悉的,這是什麼public final ImmutableList<E> tail;意思是,爲什麼聲明使用泛型類的名稱,這是什麼屬性的區別:這個泛型語法是什麼意思?

public final E head; 

這:

public final ImmutableList<E> tail; 

是他們相似?

+0

這意味着什麼:'class A {private final A obj; }'? – 2015-03-02 19:47:59

+0

爲什麼不使用公開最後E尾是ImmutableList 尾! – Mouheb 2015-03-02 19:52:21

+0

這不會形成一個'LinkedList',這就是我猜想的代碼應該表示的內容。 – 2015-03-02 19:53:32

回答

1

此代碼是遞歸列表的典型實現。每個列表都有一個E類型的頭部,並且作爲尾部另一個遞歸列表,它也有一個E型頭部,並且作爲尾部又一個遞歸列表。

遞歸的問題是要理解它,你必須首先理解遞歸。

0

不同之處在於前者確切地定義了一個名爲head的E型對象。後者定義了一個ImmutableList,其中包含一組名爲tail的對象。這是一個遞歸定義。