Я разрабатываю класс, который имеет целью быть неизменный контейнер для некоторых объектов. Это происходит очень часто, что 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);
}
};
}
}
ВОПРОС: ли это на самом деле оправдано, чтобы сделать такое различие между контейнеры для одного и нескольких объектов. I primiraly делает это, чтобы не тратить память на создание определенного объекта коллекции, например ArrayList<T>
или TreeSet<T>
, который определенно избыточен в случае одного объекта Container
.
Разумный, на самом деле. Большое спасибо. –