Для тих, хто заманюється сюди за назвою: так, ви можете визначити свої власні методи у перерахунку. Якщо вам цікаво, як викликати такий нестатичний метод, ви робите це так само, як і будь-який інший нестатичний метод - ви викликаєте його на зразок типу, який визначає або успадковує цей метод. У разі перерахунків такі випадки просто ENUM_CONSTANT
s.
Отже, все, що вам потрібно, це EnumType.ENUM_CONSTANT.methodName(arguments)
.
Тепер повернемося до проблеми з питання. Одним з рішень може бути
public enum Direction {
NORTH, SOUTH, EAST, WEST;
private Direction opposite;
static {
NORTH.opposite = SOUTH;
SOUTH.opposite = NORTH;
EAST.opposite = WEST;
WEST.opposite = EAST;
}
public Direction getOppositeDirection() {
return opposite;
}
}
Тепер Direction.NORTH.getOppositeDirection()
повернеться Direction.SOUTH
.
Ось трохи більш "хакітний" спосіб проілюструвати коментар @jedwards, але він не такий гнучкий, як перший підхід, оскільки додавання більшої кількості полів або зміна їх замовлення порушить наш код.
public enum Direction {
NORTH, EAST, SOUTH, WEST;
// cached values to avoid recreating such array each time method is called
private static final Direction[] VALUES = values();
public Direction getOppositeDirection() {
return VALUES[(ordinal() + 2) % 4];
}
}