首页 > 解决方案 > 具有相反方向的枚举

问题描述

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

根据您所在的房间,您可以通过选择方向(NorthSouthEastWest)前往您旁边的房间。

我已经用一个Enum类表示了方向,我正在寻找一种与, for (等等)North相反的实现方式,以便以最终形式创建所有房间的布局游戏。SouthEastWest

这是我的Enum课:

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

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

}

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

标签: javaenums

解决方案


您可以制作方法abstract,并为每个常量实现它。

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;
    }
}

推荐阅读