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