Рассмотрим ниже enums
, что лучше? Оба они могут использоваться точно так же, но каковы их преимущества друг над другом?
1. Переопределение абстрактного метода:
public enum Direction {
UP {
@Override
public Direction getOppposite() {
return DOWN;
}
@Override
public Direction getRotateClockwise() {
return RIGHT;
}
@Override
public Direction getRotateAnticlockwise() {
return LEFT;
}
},
/* DOWN, LEFT and RIGHT skipped */
;
public abstract Direction getOppposite();
public abstract Direction getRotateClockwise();
public abstract Direction getRotateAnticlockwise();
}
2. Используя один метод:
public enum Orientation {
UP, DOWN, LEFT, RIGHT;
public Orientation getOppposite() {
switch (this) {
case UP:
return DOWN;
case DOWN:
return UP;
case LEFT:
return RIGHT;
case RIGHT:
return LEFT;
default:
return null;
}
}
/* getRotateClockwise and getRotateAnticlockwise skipped */
}
Изменить: Я действительно надеюсь увидеть некоторые хорошо обоснованные/разработанные ответы с доказательствами/источниками конкретных заявлений. Большинство существующих ответов на производительность не очень убедительно из-за отсутствия доказательств.
Вы можете предложить альтернативы, но должно быть ясно, как это лучше, чем те, которые указаны и/или как заявленные хуже, и предоставляют доказательства, когда это необходимо.