Вы не можете смешивать это в выключателе. Либо вы передаете перечисление Test
в оператор switch, либо используете постоянные идентификаторы в операторах case.
Я бы предложил иметь отображение cityId <-> Test instance
и преобразование перед вызовом коммутатора.
Что-то вроде
Map<Integer, Test>` mapping = ...;
mapping.put(1234, Test.MOSCOW ); //note the use of autoboxing
...
mapping.get(cityId); //note the use of autoboxing
Редактировать: обратите внимание, что вы можете поместить это отображение в перечисление, добавить поле cityId в перечисление и автоматически заполнить сопоставление из массива, возвращенного values()
, очень похоже на предложение Криса.
public enum Test {
MOSCOW(1001),
NEWYORK(1002),
SOCHI(1234);
private final int cityId;
private Test(int cityId) {
this.cityId = cityId;
}
...
private static Map<Integer, Test> mapping = new HashMap<Integer, Test>();
static { //executed when the class is loaded
for( Test t : values() ) {
mapping.put(t.getCityId(), t);
}
}
public static toTest(int cityId) {
return mapping.get(cityId);
}
}
Это то, что мы часто делаем для подобных вещей.