2012-03-29 18 views
8

Mam adnotację, której nie można zmienić, która oczekuje dwóch argumentów String.Wyliczenie w adnotacjach

Chciałbym używać go tak:

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

To jak to sobie wyobrażałem realizacji

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

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

To nie działa, ponieważ a lub b nie może być rozwiązany statycznie .

Jakie alternatywy muszę które są ładniejszy niż:

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

Odpowiedz

2

Możesz użyć statycznej klasy wewnętrznej, aby zgrupować struny.

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

Chociaż Twoje pytanie nie wygląda to jak pytanie, ale jako deklaracja, zgadzam się z tobą. Nie można używać członków enum podczas definiowania adnotacji. Mają zastosowanie tylko "rzeczywiste" stałe, tj. Statyczne pola końcowe i stałe wyrażenia. Tak więc obecnie nie ma dobrej alternatywy.