Несколько аннотаций того же типа на одном элементе?

Мой опыт:

  • KPAX не сохраняется, довольно низкий уровень и не точно хорошо зарегистрированный
  • , в UCW довольно трудно войти для новичков из-за сложности и недостающей высокоуровневой документации.
  • SymbolicWeb мертв
  • Использование Hunchentoot непосредственно, если Ваши потребности являются главными или очень конкретные
  • , Weblocks является относительно молодым, но уже подходящим для профессиональных проектов при предложении базового уровня удобных для пользователя (редкие документы, но очень полезное сообщество). Это также поддерживает несколько хранилищ (например, CLSQL, Слон, Распространенность).

85
задан Max A. 12 October 2009 в 13:45
поделиться

2 ответа

Две или более аннотации одного типа не допускаются. Однако вы можете сделать что-то вроде этого:

public @interface Foos {
    Foo[] value();
}

@Foos({@Foo(bar="one"), @Foo(bar="two")})
public void haha() {}

Тем не менее, вам понадобится специальная обработка аннотации Foos в коде.

Кстати, я только что использовал это 2 часа назад для решения той же проблемы :)

135
ответ дан 24 November 2019 в 08:11
поделиться

Как сказал sfussenegger, это невозможно.

Обычное решение - построить "множественную" аннотацию , которая обрабатывает массив предыдущей аннотации . Обычно он называется так же, с суффиксом 's'.

Между прочим, он очень часто используется в больших публичных проектах (например, Hibernate), поэтому его не следует рассматривать как взлом, а скорее как правильный решение этой проблемы.


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

Пример:

    public @interface Foo {
      String[] bars();
    }
12
ответ дан 24 November 2019 в 08:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: