我正在尝试修复以下类,因此它将变为不可变:
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的类型所以我不知道如何深度复制它。 我想知道是否可以使该类不可变?
提前致谢
答案 0 :(得分:3)
你的班级几乎“尽可能不可变。”没有完全通用的方法来处理任意泛型类型,所以你不应该担心它。
剩下的两个问题:
l
- 浅层副本就足够了。 this.internal = new ArrayList<E>(l)
会这样做。internal.iterator()
支持remove()
,则列表类型的使用者可以删除元素。 final
,使其无法以可变的方式进行子类化。