Я быстро показать то, что я хочу достичь в «ясном» способом:Самый простой способ получить отзывчивую ориентацию enum? Java
public enum Orientation {
NORTH, WEST, SOUTH, EAST }
public enum Turn {
LEFT, RIGHT }
Так что я хочу, чтобы эти два перечислений сделать это безопасно и эффективно искать измененную ориентацию по ходу:
Orientation orient = Orientation.NORTH;
// orient points to NORTH now
orient = orient.turn(Turn.LEFT);
// orient points to WEST now
Первый способом, которым я пытался добиться этого был путем создания карты:
EnumMap<Orientation, EnumMap<Turn, Orientation>>
и карты всех направлений статический, но -й на огромный кусок map.get.put.get .... и, вероятно, немного слишком передозировка, Altough в результате этого желаемого эффекта:
directionMap.get(NORTH).get(LEFT)
// the value would then be WEST
Следующий способ я пошел был через класс Compass, что связывает все ориентации в круг .. Работает как LinkedCircuitList ... < -> NORTH < -> EAST < -> SOUTH < -> WEST < -> NORTH < -> ... Итак, Compass может иметь статическую функцию, которая вызывает любой член этого связанного списка и шаг влево или вправо, что приведет к правильному изменению направления. Но код действительно не работал так, как я этого хотел.
Итак, мой вопрос, в конце концов, имеет ли кто-нибудь опыт в этом виде кода или имеет представление о том, как добиться желаемого результата в хорошем перечислении?
Я не уверен, что понимаю. Вы спрашиваете нас, как реализовать метод turn() в перечислении Orientation? –
Я прошу идеи о том, как реализовать такой метод в хорошем и не избыточном виде (вы могли бы написать случай переключения, но это было бы плохо с точки зрения избыточности, например, WEST.turn (LEFT) всегда приводило бы к в том же направлении, а именно SOUTH) – Jan
@Jan Вам действительно нужно перечисление для 'Turn'?Я имею в виду, что это может быть только «LEFT» или «RIGHT»/ –