2014-05-13 11 views
8

ich eine Enumeration erstellen möchten, und in der es für die innere Verwendung mehrere Konstanten deklarieren ...Konstanten deklarieren innerhalb von 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; 
    } 

} 

leider kann es nicht auf diese Weise durchgeführt werden. Beste Lösung, die ich mit so habe kommen weit ist eine verschachtelte Schnittstelle zu deklarieren Konstanten zu speichern ...

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; 
    } 

} 

so frage ich mich, ob es einen besseren Weg, dies zu tun?

Antwort

8

Ich würde auch eine enum für die Categories verwenden. Wenn Sie dies in eine Top-Level-Klasse platzieren, wird es natürlich aussehen.

Sie müssen Ihre enum Werte vor irgendwelchen anderen Konstanten definieren.

AFAIK Dies wird getan, um die Syntax zu vereinfachen. Sie haben die enum-Werte zuerst mit einer speziellen, vereinfachten Syntax, gefolgt von den von Ihnen definierten Konstanten. Die Notwendigkeit dafür ist offensichtlicher, wenn Sie Methoden in Ihren Konstanten überschreiben.

+0

Danke! Es funktioniert sogar als verschachtelte enum (zumindest kompiliert) –

Verwandte Themen