我正在用Java编写(当前)基于字符串的Pokemon游戏。使用我拥有的结构,当前我要进行2种类型的对象类型匹配:宠物小精灵和移动。我要编写的方法(isStrongAgainst())两者都相同。例如,水上口袋妖怪和水上口袋妖怪对着火类口袋妖怪很强,但是这些比较可能会根据上下文暗示不同的事物。这两个类具有不同实现的isType()方法。

我的想法是使用实​​现默认isStrongAgainst()方法并声明抽象isType()方法的接口。我认为既然实现该接口的任何类都必须实现isType(),则可以在isStrongAgainst()中使用它,但是我不能。有什么办法可以解决我的问题,还是有更好的建议?

public interface TypeMatch<T> {
    boolean isType(Type t);
    default boolean isStrongAgainst(Pokemon opponent){
        if(T.isType(Type.NORMAL)){
            return false;
        }
        if(T.isType(Type.WATER)){
            return opponent.isType(Type.FIRE) ||
                    opponent.isType(Type.ROCK) ||
                    opponent.isType(Type.GROUND);
        } //etc...

最佳答案

据了解,根据口袋妖怪的类型,您的游戏包含不同的行为。我强烈建议您使用strategy design pattern

关于java - 如何编写对多种对象(Java)具有相同实现的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60313834/

10-10 18:25