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 :(得分:1)
此代码是递归列表的典型实现。每个列表都有一个类型为E的头,并且尾部是另一个递归列表,它也有一个类型为E的头,而尾部是另一个递归列表。
递归的问题是要了解它,你必须首先理解递归。
答案 1 :(得分:0)
不同之处在于前者恰好定义了一个名为head的E类型的对象。后者定义了一个包含一堆名为tail的对象E的ImmutableList。这是一个递归定义。