2009-07-05 42 views
3

我有一個這樣的枚舉類:如何找到提供給它的構造函數的參數的枚舉值?

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不使用一大堆如果結構?

回答

7

也許最簡單的方法(並且實際上相對較快)只需循環枚舉:

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

創建它們時,您可以將枚舉存儲在Map(enum類的本地)中。使用由座標組成的鍵填充地圖,值是枚舉本身。

然後你的getPosition()方法將使用座標作爲存儲值(枚舉)的關鍵。這可能比通過一組枚舉的迭代速度(像往常一樣這取決於位置創建數)

一個瑣碎方式生成密鑰會像

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

(注:因爲地圖對於類是靜態的,所以它是一個共享資源,您可能想要在線程環境中擔心同步等)

+0

這是創建密鑰的一種非常糟糕的方式。很多時候我都看到過這種事情,即使關鍵組件可能包含分隔符。 – 2009-07-05 16:07:37

+0

斑點。做匆忙。現在改爲實際工作:-) – 2009-07-05 16:24:14

相關問題