2014-05-13 19 views
8

Tôi muốn tạo một enum và tuyên bố một vài hằng số bên trong của nó để sử dụng bên trong ...Khai báo hằng bên trong enum

public enum SearchType { 

    static final String TEXT = "text"; 
    static final String BOOLEAN = "boolean"; 

    STARTS_WITH(TEXT), 
    ENDS_WITH(TEXT), 
    CONTAINS(BOOLEAN), 
    WILDCARD(TEXT), 
    REGEXP(TEXT), 
    RANGE(TEXT) 


    private String searchType; 

    private SearchType(String type) { 
     searchType = type; 
    } 

} 

tiếc là nó không thể được thực hiện theo cách này. Giải pháp tốt nhất mà tôi đã đưa ra cho đến nay là khai báo một giao diện lồng nhau để lưu trữ các hằng số ...

public enum SearchType { 

    STARTS_WITH(Categories.TEXT), 
    ENDS_WITH(Categories.TEXT), 
    CONTAINS(Categories.BOOLEAN), 
    WILDCARD(Categories.TEXT), 
    REGEXP(Categories.TEXT), 
    RANGE(Categories.TEXT) 


    interface Categories{ 
     static final String TEXT = "text"; 
     static final String BOOLEAN = "boolean"; 
    } 

    private String searchType; 

    private SearchType(String type) { 
     searchType = type; 
    } 

} 

vì vậy tôi tự hỏi liệu có cách nào tốt hơn để làm như vậy không?

Trả lời

8

Tôi cũng sẽ sử dụng số enum cho số Categories. Nếu bạn đặt nó trong một lớp cấp cao nhất, nó sẽ trông tự nhiên.

Bạn phải xác định các giá trị enum trước bất kỳ hằng số nào khác.

AFAIK Điều này được thực hiện để đơn giản hóa cú pháp. Bạn có các giá trị enum đầu tiên với một cú pháp đặc biệt, đơn giản, tiếp theo là các hằng số bạn xác định. Sự cần thiết cho điều này là rõ ràng hơn khi bạn bắt đầu ghi đè các phương thức trong các hằng số của bạn.

+0

Cảm ơn! Nó hoạt động ngay cả khi lồng nhau enum (ít nhất là biên dịch) –

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