yeterli değildir.
Ben tüm yöntemin kendisine çağırır orijinal değişken listesi (temsilci) için dahili bir referans var ve ileri verecek bir delegating liste uygulaması yaratacak. Bu kodu elle yazmak bir PITA'dır, ancak Eclipse örneğin sizin için otomatik olarak üretebilir.
Sonra
freeze
yöntemini çağırarak üzerine, ben
FreezingList
sadece unmodifable görünüm sayesinde orijinal temsilci gitmek için gelecekteki yöntemin tüm çağrıları olmasını sağlar
Collections.unmodifiableList
ile orijinal listeyi kaydırmak istiyorum.
İşleri daha güvenli, ancak daha az esnek hale getirmek için, aşağıdaki kurucuyu değiştirebilir ve orijinal listeyi kendisine aktarmaya (yerine orijinal değiştirilebilen listeyi istemciye bırakabilir) yerine listeyi dahili olarak başlatabilirsiniz (örneğin ArrayList
olarak).
public class FreezingList<E> implements List<E> {
// the original list you delegate to (the delegate)
private List<E> list;
private boolean frozen = false;
public FreezingList(List<E> list) {
this.list = list;
}
public void freeze() {
if (!frozen) {
list = Collections.unmodifiableList(list);
frozen = true;
}
}
// all the delegating methods follow:
public int size() {
return list.size();
}
public E get(int index) {
return list.get(index);
}
// etc. etc.
}
Bunlardan birini mi kastediyorsunuz? http://download.oracle.com/javase/6/docs/api/java/util/Collections.html?is-external=true#unmodifiableList(java.util.List). Kendi listenizi (strateji olarak) oluşturabilir ve dondurma yöntemi çağrıldığında, değişmez bir liste için dahili listeyi değiştirirsiniz. – Augusto