2015-03-02 2 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; } '? –

+0

почему бы не использовать публичный конечный E хвост istead of ImmutableList Хвост !! – Mouheb

+0

Это не сформировало бы «LinkedList», который должен представлять этот код, я бы догадался. –

ответ

1

Этот код является типичной реализацией рекурсивного списка. В каждом списке есть голова типа E, а в виде хвоста - другой рекурсивный список, который также имеет голову типа E, а также хвост еще один рекурсивный список.

Проблема с рекурсией заключается в том, что для ее понимания вы должны сначала понять рекурсию.

0

Разница в том, что первый определяет ровно один объект типа E, названный головой. Последний определяет ImmutableList, содержащий кучу объектов E named tail. Это рекурсивное определение.

Смежные вопросы