这是我的课:
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?