嘿我正在制作游戏,它可以产生箱子,物品和食物。
我在包Spawn中有一个名为ISpawn的接口。
在包装Spawn中,我有一个叫做胸部的包裹来处理胸部的东西,因为'它是一个很大的系统。
在包spawn中我有food.java和items.java。
ChestHandler,Food,Items都在实现ISpawn接口,它包含一个方法:
public void spawn(int x, int y);
但是,胸部和胸部存在一个问题。食物我需要包含一个枚举类型,所以它是这样的:
public void spawn(int x, int y, chestType type) {
Chest chest = HungerGamesFactory.buildChest(type, x, y, chestCount);
chests.put(chestCount, chest);
chestCount++;
}
但是它正在实现界面,我不能为我的其余课程设置chestType,因为我需要为它们使用不同的枚举。
我提出了这个想法:
public void spawn(int x, int y, Enum<?> e) {
chestType type = (chestType) e;
Chest chest = HungerGamesFactory.buildChest(type, x, y, chestCount);
chests.put(chestCount, chest);
chestCount++;
}
这是一个很好的解决方案吗?设计?有没有更好的方法来做这个更清洁?
答案 0 :(得分:2)
您发布的代码并不完全清楚,但我认为您应该向ISpawn
添加泛型类型参数:
public interface ISpawn<T> {
public void spawn(int x, int y, T type);
}
然后,您的实现可以指定方法中使用的特定类型:
public class Chest implements ISpawn<ChestType> {
@Override
public void spawn(int x, int y, ChestType type) {
...
}
}
注意这意味着您不需要投射type
- 只能使用ChestType
实例调用它。
如果您想将类型T
限制为枚举类型,则可以使用ISpawn<T extends Enum<T>>
。