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