我有一个这样的枚举类:
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.A1
和Position.A2
返回dx
或dy
而不使用大量的if结构吗?
答案 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;
(注意:由于地图对于类是静态的,因此它是共享资源,您可能需要担心线程环境中的同步等)