инициализация списков в перечислении - PullRequest
1 голос
/ 02 января 2012

Предположим, я хочу определить перечисление, указывающее на массив объектов. Можно ли это сделать? В приведенном ниже коде закомментированная часть определяет перечисление, указывающее на отдельные объекты, и работает нормально, но незакомментированный код, который пытается инициализировать массивы объектов, вызывает кучу ошибок.

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;
}
}

В связанной заметке предположим, что я хотел определить фиксированное отображение между двумя перечислениями: каков наилучший способ сделать это? Карта? Hash? Чтобы быть точным, предположим, аналогично приведенному выше коду, я хотел определить объект A, что, если NORTH - это другое значение перечисления A [NORTH], вернет требуемый список MapLocations.

Ответы [ 2 ]

2 голосов
/ 02 января 2012

Я думаю, что это должно быть так:

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

Голая конструкция {...} не может использоваться в этом контексте.

0 голосов
/ 02 января 2012

Всегда помните, что { } может использоваться для определения массива, только если он используется в операторе, который также объявляет массив.

, например

MapLocation[] locs = {new MapLocation(0,1), new MapLocation(0,2)};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...