我有一个项目,其中有一个农场和不同类型的动物可以从这些农场中产生。
当调用new Sheep()
或new Cow()
时,会将动物放置在该字段上,当在场上调用generate()
时,它会创建指定类型的动物。
这样的事情:
public abstract class Animal {
public static Arraylist<Animal> allAnimals = new Arraylist<>();
public Point pos;
public boolean eatsGrass;
public Animal(Point p) {
// Spawn animal onto the field
allAnimals.add(this);
this.pos = p;
}
}
public class Sheep extends Animal {
public Sheep(Point p) {
super(p);
// Run specific Sheep-spawning code
eatsGrass = true;
}
}
public class Farm<T extends Animal> {
public void generate() {
// Do something here to spawn T
// Of course, new T(); doesn't work and in general
// generic object initialization methods are ugly
}
}
public static void main(String[] args) {
Farm f = new Farm<Sheep>();
for (int i = 0; i < 100; i++) {
f.generate();
// Should create 100 sheep
}
}
我不是在问如何初始化Generic对象,有很多可用的帮助。但是,我知道通常有更好的方法来布置代码,以避免您可能希望初始化Generic对象的情况。
如何更改/添加此代码以便我不再需要通用初始化?我研究了工厂模式,但我不确定在这种情况下能帮到我。