2014-05-12 17 views
24

Có cách nào để xác định biến cuối cùng tĩnh (hằng số có hiệu quả) trong khai báo enum Java không?Làm thế nào để xác định hằng số tĩnh trong một enum Java?

Những gì tôi muốn là xác định ở một nơi chuỗi giá trị văn chương cho BAR (1 ... n) giá trị:

@RequiredArgsConstructor 
public enum MyEnum { 
    BAR1(BAR_VALUE), 
    FOO("Foo"), 
    BAR2(BAR_VALUE), 
    ..., 
    BARn(BAR_VALUE); 

    private static final String BAR_VALUE = "Bar"; 

    @Getter 
    private final String value; 
} 

tôi nhận được thông báo lỗi sau cho đoạn code trên: có thể không tham khảo một trường trước khi được xác định.

+2

tại sao bạn có quá nhiều enums có cùng giá trị? điều này dường như hoàn toàn chống lại thành ngữ của enums! – Juvanis

+1

Lỗi văn bản là câu trả lời cho vấn đề của bạn !! –

+2

@Juvanis: lưu ý rằng mỗi cá thể enum có tên riêng của nó nên tôi không coi nó là vi phạm thành ngữ của enums. Trong trường hợp của tôi, các cá thể của MyEnum đóng vai trò như các phím cho bản đồ mà các phím mà tôi muốn cũng xuất ra mục tiêu bên ngoài. Các giá trị đầu ra này xảy ra giống nhau trong một số trường hợp theo đặc điểm kỹ thuật. – jilt3d

Trả lời

33

Như IntelliJ IDEA đề xuất khi trích xuất hằng số - tạo lớp bên trong tĩnh. Cách tiếp cận này hoạt động:

@RequiredArgsConstructor 
public enum MyEnum { 
    BAR1(Constants.BAR_VALUE), 
    FOO("Foo"), 
    BAR2(Constants.BAR_VALUE), 
    ..., 
    BARn(Constants.BAR_VALUE); 



    @Getter 
    private final String value; 

    private static class Constants { 
     public static final String BAR_VALUE = "BAR"; 
    } 
} 
+0

Tôi nghĩ rằng cần lưu ý rằng @RequiredArgsConstructor là từ thư viện lombok. – DaShaun

+0

Mặc dù cái này không hoạt động để sử dụng 'hằng số' thành các giá trị chú thích. –

-1

Có lẽ bạn nên xem xét vi phạm enum này thành hai lĩnh vực: một enum và một int:

@RequiredArgsConstructor 
public enum MyEnum { 
    BAR("Bar"), 
    FOO("Foo") 

    @Getter 
    private final String value; 
} 

Và sau đó sử dụng:

private MyEnum type; 
private int value; 

(Bạn có thể đặt đó vào một lớp học hay không, cho dù điều đó có ý nghĩa với bạn)

Các vấn đề liên quan