in Java < 1.5 würde Konstanten wie dieseSollten Sie immer Aufzählungen anstelle von Konstanten in Java verwenden
public class MyClass {
public static int VERTICAL = 0;
public static int HORIZONTAL = 1;
private int orientation;
public MyClass(int orientation) {
this.orientation = orientation;
}
...
umgesetzt werden und man würde es wie folgt verwenden:
MyClass myClass = new MyClass(MyClass.VERTICAL);
nun in 1,5 Natürlich sollten Sie Enums verwenden:
public class MyClass {
public static enum Orientation {
VERTICAL, HORIZONTAL;
}
private Orientation orientation;
public MyClass(Orientation orientation) {
this.orientation = orientation;
}
...
und jetzt würden Sie es wie folgt verwenden:
MyClass myClass = new MyClass(MyClass.Orientation.VERTICAL);
Was ich leicht hässlich finde. Jetzt konnte ich einfach ein paar statische Variablen hinzufügen:
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;
}
...
Und jetzt kann ich das wieder tun:
MyClass myClass = new MyClass(MyClass.VERTICAL);
Mit all der typsichere Güte Aufzählungen.
Ist das ein guter Stil, schlechter Stil oder keiner von beiden. Können Sie sich eine bessere Lösung vorstellen?
aktualisieren
Vilx- war der erste, zu markieren, was ich fühle ich fehlte -, dass der ENUM ein Bürger erster Klasse sein sollte. In Java bedeutet dies, dass es eine eigene Datei im Paket erhält - wir haben keine Namespaces. Ich hatte gedacht, dass das ein bisschen Schwergewicht sein würde, aber tatsächlich getan, es fühlt sich definitiv richtig an.
Yuval's Antwort ist in Ordnung, aber es betonte nicht wirklich die nicht verschachtelte Enum. Auch für 1.4 - es gibt viele Stellen im JDK, die Ganzzahlen verwenden, und ich war wirklich auf der Suche nach einer Möglichkeit, diese Art von Code zu entwickeln.
Im ersten Codeblock wollten Sie jeder Variablen einen anderen Wert geben, oder? –
Brauchen Sie tatsächlich die Klasse MyClass, um mehr zu tun als nur die verschiedenen Orientierungen? –