【发布时间】:2016-01-24 12:07:59
【问题描述】:
我正在设计一个类,其目的是成为某些对象的不可变容器。 Container 对象只包含一个对象,并且由于它是不可变的,因此我倾向于按如下方式实现它:
public abstract class Container{
public abstract Iterable<Object> getObjectGroup();
private Container(){ }
public static Container createSingle(final Object o) {
return new Container() {
@Override
public Iterable<Object> getObjectGroup() {
return new Iterable<Object>() {
@Override
public Iterator<Object> iterator() {
return new Iterator<Object>() {
private boolean next = true;
@Override
public boolean hasNext() {
return next;
}
@Override
public Object next() {
next = false;
return o;
}
@Override
public void remove() {
throw new UnsupportedOperationException("Unable to remove from an immutable container");
}
};
}
};
}
};
}
public static Container createMultiple(final Collection<Object> o) {
return new Container() {
@Override
public Iterable<Object> getObjectGroup() {
return Collections.unmodifiableCollection(o);
}
};
}
}
问题: 对单个对象和多个对象的容器进行这种区分是否真的合理。我这样做主要是为了不浪费内存来创建特定的集合对象,例如 ArrayList<T> 或 TreeSet<T>,这在单个对象 Container 的情况下绝对是多余的。
【问题讨论】:
标签: java collections iterable