是否可以修复此类以使其成为不可变的

时间:2015-07-01 18:10:53

标签: java

我正在尝试修复以下类,因此它将变为不可变:

public class ImmutableList<E> implements Iterable<E> {
    private List<E> internal;
    public ImmutableList(List<E> l) {
        this.internal = l;
    }
    public int size() {
        return this.internal.size();
    }
    public E get(int i) {
        return this.internal.get(i);
    }
    public Iterator<E> iterator() {
        return this.internal.iterator();
    }
}

但目前我没有成功,我的问题是我不知道E的类型所以我不知道如何深度复制它。 我想知道是否可以使该类不可变?

提前致谢

1 个答案:

答案 0 :(得分:3)

你的班级几乎“尽可能不可变。”没有完全通用的方法来处理任意泛型类型,所以你不应该担心它。

剩下的两个问题:

  • 您需要复制l - 浅层副本就足够了。 this.internal = new ArrayList<E>(l)会这样做。
  • 如果internal.iterator()支持remove(),则列表类型的使用者可以删除元素。
  • 制作班级final,使其无法以可变的方式进行子类化。