В java < 1.5 константы будут реализованы следующим образом:
public class MyClass {
public static int VERTICAL = 0;
public static int HORIZONTAL = 1;
private int orientation;
public MyClass(int orientation) {
this.orientation = orientation;
}
...
и вы будете использовать его следующим образом:
MyClass myClass = new MyClass(MyClass.VERTICAL);
Теперь, в 1.5, очевидно, вы должны использовать перечисления:
public class MyClass {
public static enum Orientation {
VERTICAL, HORIZONTAL;
}
private Orientation orientation;
public MyClass(Orientation orientation) {
this.orientation = orientation;
}
...
и теперь вы будете использовать его следующим образом:
MyClass myClass = new MyClass(MyClass.Orientation.VERTICAL);
Что я считаю немного уродливым. Теперь я мог бы легко добавить пару статических переменных:
public class MyClass {
public static Orientation VERTICAL = Orientation.VERTICAL;
public static Orientation HORIZONTAL = Orientation.HORIZONTAL;
public static enum Orientation {
VERTICAL, HORIZONTAL;
}
private Orientation orientation;
public MyClass(Orientation orientation) {
this.orientation = orientation;
}
...
И теперь я могу сделать это снова:
MyClass myClass = new MyClass(MyClass.VERTICAL);
Со всем безопасным типом перечислений.
Это хороший стиль, плохой стиль или нет. Можете ли вы придумать лучшее решение?
Обновление
Вилкс был первым, кто подчеркнул, что я чувствую, что мне не хватает - что перечисление должно быть первоклассным гражданином. В java это означает, что он получает свой собственный файл в пакете - у нас нет пространств имен. Я думал, что это будет немного тяжеловесом, но, на самом деле, это действительно правильно.
Ответ Yuval в порядке, но на самом деле это не особо подчеркивало не вложенное перечисление. Кроме того, что касается 1.4 - в JDK есть много мест, которые используют целые числа, и я действительно искал способ разработки такого кода.