我有这个问题。我有两个层次结构,一个是 Animal,另一个是 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
}
}
我有一些 List 类的方法,使用 AnimalStore 中的方法转发。我有一种获取列表的方法,我在其中创建另一个列表并迭代从动物获取并设置为 newList。然后我将 newList 作为新列表的副本返回。这在内存区域很痛苦,因为我的 GUI 框架在创建页面时会收到此列表(我使用 Wicket BTW)。假设有 10,000 个用户访问该页面。因此该方法将创建 10, 000 个副本列表。最糟糕的!如果他们只是刷新页面也会发生。我不想返回原始列表,因为我不想客户端将猫添加到 DogStore 的动物列表中。