这个通用语法是什么意思?

时间:2015-03-02 19:47:08

标签: java generics

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;
它们相似吗?

2 个答案:

答案 0 :(得分:1)

此代码是递归列表的典型实现。每个列表都有一个类型为E的头,并且尾部是另一个递归列表,它也有一个类型为E的头,而尾部是另一个递归列表。

递归的问题是要了解它,你必须首先理解递归。

答案 1 :(得分:0)

不同之处在于前者恰好定义了一个名为head的E类型的对象。后者定义了一个包含一堆名为tail的对象E的ImmutableList。这是一个递归定义。