Java 给定提供给其构造函数的参数,如何查找枚举值?

Java 给定提供给其构造函数的参数,如何查找枚举值?,java,enums,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; } } 现在我想要一个方法:publicstaticpositiongetposition(intdx,intdy) 我是

我有这样一个枚举类:

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;
    }
}
现在我想要一个方法:
publicstaticpositiongetposition(intdx,intdy)

我是否可以使用给定的
dx
dy
返回
Position.A1
Position.A2
,而不使用大量的if结构?

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

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

生成密钥的简单方法如下

String key = "" + dx + "/" + dy;
(注意:由于映射对类是静态的,因此它是一个共享资源,您可能需要担心线程环境中的同步等问题)

也许最简单的方法(实际上相对较快)是通过简单地循环枚举:

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

这是一种非常糟糕的创建密钥的方法。我见过很多次这样的事情,即使关键部件可能包含分离器。很好。仓促完成。现在改为实际工作:-)