Java枚举链接到另一个枚举
我希望Java中的枚举器具有其他枚举作为属性Java枚举链接到另一个枚举,java,enums,Java,Enums,我希望Java中的枚举器具有其他枚举作为属性 public enum Direction { Up(Down), Down(Up), Left(Right), Right(Left); private Direction opposite; Direction(Direction opposite){ this.opposite = opposite; } } 所以我有不同的方向,对于每个方向,我想知道相反的方向。 它
public enum Direction {
Up(Down),
Down(Up),
Left(Right),
Right(Left);
private Direction opposite;
Direction(Direction opposite){
this.opposite = opposite;
}
}
所以我有不同的方向,对于每个方向,我想知道相反的方向。
它在向下和向右运行都很好,但我不能初始化向上,因为向下还不知道(左边是同一个堡垒)
初始化后如何编辑枚举变量?将初始化放在静态块中:
公共枚举方向{
上、下、左、右;
私人方向相反;
静止的{
向上。设置方向(向下);
向下。设置方向(向上);
左。设置方向(右);
右。设置方向(左);
}
专用方向(方向相反){
这个。相反的=相反的;
}
公共字符串toString(){
返回此.name()+”(“+相反的.name()+”);
}
}
快速而肮脏的解决方案,将初始化放在静态
块中:
public enum Direction {
Up,
Down,
Left,
Right;
private Direction opposite;
public Direction opposite() {
return this.opposite;
}
static {
Up.opposite = Down;
Down.opposite = Up;
Left.opposite = Right;
Right.opposite = Left;
}
}
一个技巧是将参数保留为
null
s:
enum Direction {
Up(null),
Down(Up),
Left(null),
Right(Left);
并在构造器中将“反向的反向”设置为this
:
Direction(Direction opposite){
this.opposite = opposite;
if (opposite != null) {
opposite.opposite = this;
}
}
但这仅仅是一个骗局。我认为这不是一个好看的代码。可能的解决方案之一-您可以将此登录封装在方法中
public Direction getOpposite() {
switch (this) {
case Up:
return Down;
case Down:
return Up;
case Left:
return Right;
case Right:
return Left;
}
return null;
}
对于将使用此枚举的类,它将是相同的接口。setDirection的名称有误导性。设置相反方向或设置相反方向会更好。