2012-01-02 89 views
1

假設我想定義一個指向對象數組的枚舉。這可以做到嗎?在下面的代碼中,註釋掉的部分定義了一個指向單個對象的枚舉,並且工作正常,但是嘗試初始化對象數組的未註釋的代碼導致了一堆錯誤。在枚舉中初始化列表

public enum SightSensor{ 

/*NORTH (new MapLocation(0,1)), 
SOUTH (new MapLocation(0,-1)); 

private final MapLocation loc; 

SightSensor(MapLocation loc){ 
this.loc = loc; 
} 

public MapLocation getLoc(){ 
return loc; 
}*/ 

NORTH ({new MapLocation(0,1), new MapLocation(0,2)}), 
SOUTH ({new MapLocation(0,-1), new MapLocation(0,-2)}); 

private final MapLocation[] locs; 

SightSensor(MapLocation[] locs){ 
this.locs = locs; 
} 

public MapLocation[] getLocs(){ 
return locs; 
} 
} 

在相關說明中,假設我想定義兩個枚舉之間的固定映射:那麼最好的方法是什麼?地圖?哈希?準確地說,假設類似於上面的代碼,我想定義一個對象A,如果NORTH是一個不同的枚舉值A [NORTH]將返回所需的MapLocations列表。

+0

沒有爲枚舉優化的地圖:[EnumMap的](http://docs.oracle.com/javase/6/docs/api/java/util/EnumMap.html) – Kapep 2012-01-02 03:37:34

回答

2

我覺得應該是這樣的:

NORTH (new MapLocation[]{new MapLocation(0,1), new MapLocation(0,2)}), ... 

{...}結構不能在這種情況下使用。

+0

即是卓有成效的。你是一個紳士和學者。 – andyInCambridge 2012-01-02 03:35:55

0

請務必記住,{ }只能在聲明數組的語句中使用時定義數組。

例如

MapLocation[] locs = {new MapLocation(0,1), new MapLocation(0,2)};