2012-01-02 10 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; 
} 
} 

、私は2つの列挙型の間の固定マッピングを定義したいとしますそうするための最良の方法は何ですか?地図?ハッシュ?正確には、上記のコードと同様に、NORTHが異なるenum値の場合、[NORTH]が目的のMapLocationsのリストを返すオブジェクトAを定義したかったとします。

+0

列挙するために最適化されたマップがある:[EnumMap(http://docs.oracle.com/javase/6/docs/api/java/util/EnumMap.html) – Kapep

答えて

2

私は、このされるべきだと思う:裸{...}構築物は、そのコンテキストで使用することはできません

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

+0

トリックしないこと。あなたは紳士で学者です。 – andyInCambridge

0

{ }は、配列を宣言するステートメントで使用されている場合にのみ配列を定義するために使用できます。

MapLocation[] locs = {new MapLocation(0,1), new MapLocation(0,2)}; 
関連する問題