2012-03-29 6 views
8

Ich habe eine Anmerkung Ich kann nicht ändern, die zwei String Argumente erwartet.Enum in Annotationen

würde Ich mag es wie folgt verwenden:

@RequestMapping(MyUrls.FOO.a, MyUrls.FOO.b) 

Dies ist, wie ich es mir vorgestellt Umsetzung es

public enum MyUrls { 
    FOO("a", "b"), 
    BAR("c", "d"); 

    public String a, b; 
    MyUrls(String a, String b) { 
     this.a = a; 
     this.b = b; 
    } 
} 

Dieses seit nicht a funktioniert oder b kann nicht statisch aufgelöst werden .

Welche Alternativen muss ich die schöner als sind:

class MyUrls { 
    public static String FOO_A = ""; 
    public static String FOO_B = ""; 
    // ... 
} 

Antwort

2

Sie könnten eine statische innere Klasse verwenden, um Ihre Strings zu gruppieren.

class MyUrls { 
    public static final class Foo{ 
     public static final String A = ""; 
     public static final String B = ""; 
     // ... 
    } 
} 
//works as 
MyUrls.Foo.A 
3

Obwohl Ihre Frage wie eine Frage sieht nicht aus, sondern als Erklärung, ich stimme Ihnen zu. Sie können Enum-Elemente nicht verwenden, wenn Sie Anmerkungen definieren. Nur "echte" Konstanten, d. H. Statische Endfelder und konstante Ausdrücke, sind anwendbar. Also, im Moment gibt es keine gute Alternative.