为每个枚举实例分配不断增长的ID

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)

但是我收到一条错误消息,指出它无法引用初始化程序中的静态字段.

有没有解决方法?

Jir*_*ser 5

您可以使用ordinal()方法.它基于在源代码中声明成员的顺序,并从零开始计算.所以我想,正是你需要的.

只需注意:您可以通过致电从序号中获取原始枚举成员 .values()[index]

例:

int hillOrdinal = TerrainTile.HILL.ordinal(); // 2
TerrainTile hill = TerrainTile.values()[hillOrdinal];
Run Code Online (Sandbox Code Playgroud)