这是我的课:

public class FoodSet<T extends ConcreteFood>{
    public List<T> food = new ArrayList<T>();
    public FoodSet()
    {
        /*
        *  FoodType is an enum containing food types e.g: rice, pork, beef ...
        */
        for(FoodType foodType : FoodType.values())
        {
            /*
            * 1(*)
            * /
            food.add( (T)new ConcreteFood(foodType,0) )
        }
    }
}

在1(*)中是问题所在,如何使用'T'类型初始化此列表?
现在,我用ConcreteFood进行初始化,并以foodType和数量作为参数,
但我的目标是使用扩展ConcreteFood的T初始化此列表。
ConcreteFood的每个子类都可以访问foodType和食物计数。
我只想用适当的ConcreteFood子类初始化此列表,然后
使用foodType和count = 0初始化每个ConcreteFood对象。
我该怎么办?

最佳答案

这不是你想要的。您需要一个工厂类来为您创建ConcreteFood实例。

public class FoodFactory {
    private static final FoodFactory INSTANCE = new FoodFactory();

    private FoodFactory() {}

    public static FoodFactory getInstance() { return INSTANCE; }

    public Food create(FoodType type) {
       // Put the type checks here
    }
}

我不太在乎你的名字。 “具体食品”?听起来不开胃。为什么不选择FoodCategory?

07-26 05:01