Các hằng enum cần phải là yếu tố đầu tiên trong Enumeration. Một phiên bản của mã của bạn mà biên dịch:
class Foo {
public enum MyEnum {
MyEnumType, MyEnumType2;
public String bar() {
return MY_STRING;
}
public String bar2() {
return MY_STRING + "2";
}
private static final String MY_STRING = "a string I reuse in the enum";
}
}
* EDIT *
Dựa tắt chỉnh sửa làm cho câu hỏi ban đầu của bạn, tôi thấy những gì bạn đang cố gắng làm. Không, không thể sử dụng các hằng số trong các khai báo enum của bạn được khai báo trong chính định nghĩa enum. Điều này là do các khai báo theo nghĩa đen phải là các phần tử đầu tiên trong enum. Điều này được bắt buộc bởi Đặc tả Ngôn ngữ Java. Hai điều nhanh chóng mặc dù:
- Bạn đang sử dụng
private static final Strings
. Điều này mang lại cho bạn hoàn toàn không có lợi ích gì hơn việc sử dụng các chuỗi ký tự thay thế, sẽ giải quyết được vấn đề.
- Nếu bạn muốn khai báo các hằng số có thể sử dụng lại (
public static final Strings
) thì bạn cần phải làm như vậy bên ngoài của enum.
Hoặc bạn có thể tuyên bố Enums của bạn như các yếu tố lồng nhau của một lớp trong đó xác định private static final String
's cho bạn.
Một số giả:
public class Foo {
public static enum MyEnum {
MyEnumType(0, MY_STRING), MyEnumType2(1, "Hello");
private int ordinal;
private String value;
MyEnum(int ordinal, String value) {
this.ordinal = ordinal;
this.value = value;
}
public int getOrdinal() {
return ordinal;
}
public String getValue() {
return value;
}
public void setOrdinal(int ordinal) {
this.ordinal = ordinal;
}
public void setValue(String value) {
this.value = value;
}
}
private static final String MY_STRING = "a string I reuse in the enum";
}
Công ước nói để đặt trường của bạn về phương pháp của bạn. –
Tôi thực sự đang sử dụng các chuỗi trong hàm tạo. – will
Tom - Bạn có ý gì khi "đặt trường của bạn về phương pháp của bạn"? – will