java - 具有相反方向的枚举

标签 java enums

<分区>

我目前正在开发一个地牢游戏项目,该项目由多个相互连接的房间组成。

根据您所在的房间,您可以通过选择方向(西)。

我已经用 Enum 类表示方向,我正在寻找一种方法来实现 NorthSouth 相反>,EastWest(依此类推...),以便在游戏的最终形式中创建所有房间的布局。

这是我的 Enum 类:

public enum Direction {
    NORTH,
    EAST,
    SOUTH,
    WEST;

    public Direction getOppositeDirection() {
        return Direction.values()[(this.ordinal()+2)%4];
    }

}

问题是目前该方法不是很安全,方向声明顺序的任何改变都会破坏该方法,关于如何以更好的方式做到这一点有什么建议吗?

最佳答案

您可以使方法抽象,并为每个常量实现它。

enum Direction {
    NORTH() {
        public Direction getOppositeDirection() {
            return SOUTH;
        }
    },
    EAST() {
        public Direction getOppositeDirection() {
            return WEST;
        }
    },
    SOUTH() {
        public Direction getOppositeDirection() {
            return NORTH;
        }
    },
    WEST() {
        public Direction getOppositeDirection() {
            return EAST;
        }
    };

    public abstract Direction getOppositeDirection();
}

虽然有点啰嗦。

下一个方法更短但更难阅读。

enum Direction {
    NORTH, EAST, SOUTH, WEST;

    static {
        (SOUTH.oppositeDirection = NORTH).oppositeDirection = SOUTH;
        (WEST.oppositeDirection = EAST).oppositeDirection = WEST;
    }

    private Direction oppositeDirection;

    public Direction getOppositeDirection() {
        return oppositeDirection;
    }
}

关于java - 具有相反方向的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52687763/

相关文章:

java - 按钮不适用于 AlexKolpa/fab-toolbar

java - OpenNLP 保存训练好的模型

c++ - 初始化列表中的编译时替换

json - 使用 Play 2.3 和 Scala 2.11.1 将具有枚举属性的类转换为 Json 时出错

c# - 返回 const 值的函数

java - 如何确保枚举的状态特定于一个实例

java - 使用 Hibernate 在 MySQL 上将 TIMESTAMP 复制到 DATETIME

java - HBase 在运行时给出 "JAVA_HOME is not set"

java - 在 JDBC 查询中使用表名作为参数的安全方法

java - 由 EnumMap/EnumSet 完成的优化