重写抽象方法还是在枚举中使用单个方法?
考虑下面,哪个更好?它们都可以以完全相同的方式使用,但是它们彼此相比有什么优势呢?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 */
}
编辑:我真的希望看到一些合理/精心阐述的答案,以及特定主张的证据/来源。由于缺乏证明,大多数关于性能的现有答案并不真正令人信服。
你可以提出替代方案,但它必须清楚它如何比所述更好和/或所述如何更糟,并在需要时提供证据。