Перечень в аннотациях - PullRequest
8 голосов
/ 29 марта 2012

У меня есть аннотация, которую я не могу изменить, которая ожидает два String аргумента.

Я бы хотел использовать это так:

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

Вот так я и представлял себе реализацию

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

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

Это не работает, поскольку a или b не могут быть разрешены статически.

Какие альтернативы у меня есть, которые лучше , чем:

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

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Хотя ваш вопрос выглядит не как вопрос, а как декларация, я согласен с вами. Вы не можете использовать члены enum, когда определяете аннотации. Применимы только «реальные» константы, то есть статические конечные поля и константные выражения. Так что хорошей альтернативы сейчас нет.

2 голосов
/ 29 марта 2012

Вы можете использовать статический внутренний класс для группировки ваших строк.

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