Lin*_*ard 2 java enums static-variables
我刚刚开始使用Java的第一步,学习了所有的基础知识但后来发现了我需要的枚举问题,所以请原谅我,如果我的问题的解决方案是非常明显的:
所以我有这个枚举,并希望为从0向上计数的每个实例添加一个唯一的id,但不必为每个构造函数调用添加另一个参数(因为这可能导致以后的错误).
public enum TerrainTile{
WATER(1), GRASSLAND(1), HILL(2), FORREST(2), BLANK(99);
private final int id;
private final int moveCost;
private boolean hidden = true;
private TerrainTile(int moveCost) {
this.moveCost = moveCost;
}
Run Code Online (Sandbox Code Playgroud)
我想加上一个
static int nextID = 0;
Run Code Online (Sandbox Code Playgroud)
并编译构造函数
private TerrainTile(int moveCost) {
this.id = nextID++;
this.moveCost = moveCost;
}
Run Code Online (Sandbox Code Playgroud)
但是我收到一条错误消息,指出它无法引用初始化程序中的静态字段.
有没有解决方法?
您可以使用ordinal()方法.它基于在源代码中声明成员的顺序,并从零开始计算.所以我想,正是你需要的.
只需注意:您可以通过致电从序号中获取原始枚举成员 .values()[index]
例:
int hillOrdinal = TerrainTile.HILL.ordinal(); // 2
TerrainTile hill = TerrainTile.values()[hillOrdinal];
Run Code Online (Sandbox Code Playgroud)