en Java < 1.5, constantes serían implementados como estoen caso de que utilice siempre las enumeraciones en vez de constantes en Java
public class MyClass {
public static int VERTICAL = 0;
public static int HORIZONTAL = 1;
private int orientation;
public MyClass(int orientation) {
this.orientation = orientation;
}
...
y que lo utilizarían como esto:
MyClass myClass = new MyClass(MyClass.VERTICAL);
Ahora, en 1,5 obviamente deberías estar usando enumeraciones:
public class MyClass {
public static enum Orientation {
VERTICAL, HORIZONTAL;
}
private Orientation orientation;
public MyClass(Orientation orientation) {
this.orientation = orientation;
}
...
y ahora lo usarías así:
MyClass myClass = new MyClass(MyClass.Orientation.VERTICAL);
Que me parece un poco feo. Ahora me podría añadir un par de variables estáticas:
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;
}
...
Y ahora puedo hacer esto de nuevo:
MyClass myClass = new MyClass(MyClass.VERTICAL);
Con todos los beneficios de seguridad de tipos de enumeraciones.
Es este buen estilo, mal estilo o ninguno. ¿Puedes pensar en una mejor solución?
actualización
Vilx- fue el primero en poner de relieve lo que siento que me estaba perdiendo - que la enumeración debe ser un ciudadano de primera clase. En java, esto significa que obtiene su propio archivo en el paquete; no tenemos espacios de nombres. Pensé que esto sería un poco pesado, pero habiéndolo hecho, definitivamente se siente bien.
La respuesta de Yuval está bien, pero realmente no hizo hincapié en la enumeración no anidada. Además, en cuanto a 1.4, hay muchos lugares en el JDK que usan enteros, y realmente estaba buscando una forma de evolucionar ese tipo de código.
En el primer bloque de código, quería dar a cada variable un valor diferente, ¿no? –
¿Realmente necesita la clase MyClass para hacer más que solo las diferentes Orientaciones? –