Здравствуйте, Kuzz, Вы писали:
K>Чтобы нельзя было сделать doSome(c), нужно, чтобы с было Immutable, неизменяемое. В данном случае, List можно возвращать
K>через Collections.unmodifiableList(list).
Цель не будет достигнута. Так как:
UnmodifiableCollection(Collection<? extends E> c) {
if (c==null)
throw new NullPointerException();
this.c = c;
}
public Iterator<E> iterator() {
return new Iterator<E>() {
Iterator<? extends E> i = c.iterator();
public boolean hasNext() {return i.hasNext();}
public E next() {return i.next();}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
Тогда уж надо
synchronized (current) {
a = new ArrayList();
a.addAll(current);
return a;
}
I>>Если уж с блокировками, то может лучше
I>>I>>class Channel {
I>>...
I>> forEach(Visitor v) {
I>> synchronized(current) {
I>> for (o : current) {
I>> v.visit(o);
I>> }
I>> }
I>> }
I>>...
I>>}
I>>
I>>И без getCurrent() вообще.
I>>Иначе не будет гарантий как я понимаю. Или нет?
K>А зачем такие сложнотсти? Загромоздите архитектуру..
Действительно, зачем? Я вообще-то сразу предложил обойтись без блокировок, только не знаю правильно — нет.