如何避免通用对象初始化

时间:2017-04-11 13:07:55

标签: java

我有一个项目,其中有一个农场和不同类型的动物可以从这些农场中产生。

当调用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对象的情况。

如何更改/添加此代码以便我不再需要通用初始化?我研究了工厂模式,但我不确定在这种情况下能帮到我。

0 个答案:

没有答案