我正在用java编写一个游戏,它由瓷砖网格组成。我不希望能够直观地定义图 block 的边缘以及它们彼此之间的关系,例如要获得图 block 的相对边缘,我希望能够仅输入 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;
}
}
关于java - 非法前向引用和枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58308921/