java - 具有相反方向的枚举
问题描述
我目前正在开发一个地牢游戏项目,该项目由多个相互连接的房间组成。
根据您所在的房间,您可以通过选择方向(North
、South
、East
、West
)前往您旁边的房间。
我已经用一个Enum
类表示了方向,我正在寻找一种与, for (等等)North
相反的实现方式,以便以最终形式创建所有房间的布局游戏。South
East
West
这是我的Enum
课:
public enum Direction {
NORTH,
EAST,
SOUTH,
WEST;
public Direction getOppositeDirection() {
return Direction.values()[(this.ordinal()+2)%4];
}
}
问题是目前该方法不是很安全,方向上声明顺序的任何更改都会破坏该方法,有什么建议可以更好地做到这一点?
解决方案
您可以制作方法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;
}
}
推荐阅读
- javascript - Node.js worker_threads 模块是真正的线程还是只是带有 IPC 的进程?
- javascript - 如何在 UI5 中根据用户区域设置不同的数字表示?
- amazon-web-services - 使用 Aws SES api 在链接中传递链接标签
- angular - Angular / Express SSO 身份验证错误
- python - 无法从“virtualenv.activation.powershell”(未知位置)导入名称“PowerShellActivator”
- c - 为什么在枚举中#define 相同的项目?
- java - 当为不受限制的端点发送授权标头时,Springboot webflux 抛出 401
- angular - 角 | 从 Firebase 获取一行
- javascript - 如何在反应中编辑json文件
- javascript - 如何在继续之前等待异步完成 - JS