Trong java < 1.5, hằng sẽ được thực hiện như thế nàynên bạn luôn sử dụng enums thay vì hằng trong Java
public class MyClass {
public static int VERTICAL = 0;
public static int HORIZONTAL = 1;
private int orientation;
public MyClass(int orientation) {
this.orientation = orientation;
}
...
và bạn sẽ sử dụng nó như thế này:
MyClass myClass = new MyClass(MyClass.VERTICAL);
Bây giờ, trong 1,5 rõ ràng bạn nên sử dụng enums:
public class MyClass {
public static enum Orientation {
VERTICAL, HORIZONTAL;
}
private Orientation orientation;
public MyClass(Orientation orientation) {
this.orientation = orientation;
}
...
và bây giờ bạn sẽ sử dụng nó như sau:
MyClass myClass = new MyClass(MyClass.Orientation.VERTICAL);
Tôi thấy hơi xấu xí. Bây giờ tôi có thể dễ dàng thêm một vài biến tĩnh:
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;
}
...
Và bây giờ tôi có thể làm điều này một lần nữa:
MyClass myClass = new MyClass(MyClass.VERTICAL);
Với tất cả các loại an toàn tốt lành của sự đếm.
Đây có phải là kiểu tốt, kiểu xấu hay không. Bạn có thể nghĩ ra một giải pháp tốt hơn không?
Cập nhật
Vilx- là người đầu tiên để làm nổi bật những gì tôi cảm thấy tôi đã mất tích - rằng enum phải là một công dân hạng nhất. Trong java, điều này có nghĩa là nó nhận được tệp riêng của nó trong gói - chúng tôi không có các không gian tên. Tôi đã nghĩ rằng đây sẽ là một chút nặng, nhưng thực sự đã thực hiện nó, nó chắc chắn cảm thấy đúng.
Câu trả lời của Yuval là tốt, nhưng nó không thực sự nhấn mạnh đến enum không lồng nhau. Ngoài ra, đối với 1,4 - có rất nhiều nơi trong JDK sử dụng các số nguyên, và tôi đã thực sự tìm kiếm một cách để phát triển loại mã đó.
Trong khối mã đầu tiên, bạn có nghĩa là cung cấp cho mỗi biến một giá trị khác nhau, phải không? –
Bạn có thực sự cần lớp MyClass để làm nhiều hơn là chỉ các Định hướng khác nhau có thể làm được không? –