我正在用Java编写游戏,该游戏由一排瓷砖组成。我将无法以独创的方式定义图块的边缘以及它们之间的相互关系,例如为了获得图块的相对边缘,我希望能够只键入TOP.opposite()
。但是,当使用枚举定义这些边时,我最终不得不在构造函数中转发至少其中两个引用:
public enum Edge {
TOP(Edge.BOTTOM), //illegal forward reference
BOTTOM(Edge.TOP),
LEFT(Edge.RIGHT), //illegal forward reference
RIGHT(Edge.LEFT);
private Edge opposite;
private Edge(Edge opp){
this.opposite = opp;
}
public Edge opposite(){
return this.opposite;
}
}
有没有什么办法可以使用枚举来解决这个问题呢?
最佳答案
您可以这样做不是那么直观。
public enum Edge {
TOP, BOTTOM, LEFT, RIGHT;
private Edge opposite;
static {
TOP.opposite = BOTTOM;
BOTTOM.opposite = TOP;
LEFT.opposite = RIGHT;
RIGHT.opposite = LEFT;
}
public Edge opposite(){
return this.opposite;
}
}