实现方法的不同枚举类型

时间:2014-01-30 12:59:42

标签: java oop structure

嘿我正在制作游戏,它可以产生箱子,物品和食物。

我在包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++;
}

这是一个很好的解决方案吗?设计?有没有更好的方法来做这个更清洁?

1 个答案:

答案 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>>