如何根据提供给构造函数的参数找到枚举值?

时间:2009-07-05 15:49:44

标签: java enums

我有一个这样的枚举类:

public enum Position {
    A1(0,0),
    A2(1,0),
    //etc

    public final int dy, dx;

    private Position(int dy, int dx) {
        this.dy = dy;
        this.dx = dx;
    }
}

现在我想要一个方法:public static Position getPosition(int dx, int dy) 我可以使用给定的Position.A1Position.A2返回dxdy而不使用大量的if结构吗?

2 个答案:

答案 0 :(得分:7)

这样做最简单的方法(实际上相对较快)也就是简单地循环遍历枚举:

public static Position getPosition(int dx, int dy) {
    for (Position position : values()) {
        if (position.dx == dx && position.dy == dy) {
            return position;
        }
    }
    return null;
}

答案 1 :(得分:0)

您可以在创建枚举时将枚举存储在Map(枚举类的本地)中。使用由坐标组成的键填充地图,值为枚举本身。

然后,您的getPosition()方法将使用坐标作为存储值(枚举)的键。这可能比迭代枚举集更快(通常它取决于创建的位置数)

生成密钥的平凡方式类似于

String key = "" + dx + "/" + dy;

(注意:由于地图对于类是静态的,因此它是共享资源,您可能需要担心线程环境中的同步等)