この質問があります。私には2つの階層があります。1つはAnimalで、もう1つはAnimalStoreです。
public abstract class Animal{
//Some members
}
public class Dog extends Animal{
//Some members
}
public abstract class AnimalStore{
//Some members
private List<Animal> animals;
public abstract void addAnimal(Animal a);
//Methods forwarding some List methods
//remove, find, count,
}
public Animal get(int n){
return animals.get(n);
}
//Method for returning a copy of the list.
public class DogStore extends AnimalStore{
//some memebers
public void addAnimal(Animal a){
//Assert is a dog because this is a Dogs Store
}
}
AnimalStoreでメソッド転送を使用するListクラスのメソッドがいくつかあります。別のリストを作成し、動物からの取得とnewListへの設定を繰り返すリストを取得する方法があります。次に、newListを新しいリストのコピーとして返します。私のGUIフレームワークはページの作成時にこのリストを受け取るため(Wicket BTWを使用しています)、これはRAMゾーンの問題です。10,000人のユーザーがページにアクセスするとします。したがって、このメソッドは10,000個のコピーリストを作成します。最悪!。彼らがただ更新するならば、ページも起こります。DogStoreの動物リストに猫をクライアントで追加したくないので、元のリストを返したくありません。