2015-01-30 4 views
1

При использовании настраиваемого квалификатора рядом с квалификатором @Observes, чтобы поймать событие, у меня есть эта ошибка компиляции.Аннотации «@Added» запрещены для этого местоположения при использовании пользовательской аннотации с событиями в CDI

Все классы находятся в одном пакете, поэтому проблема не в операторах импорта. Я уже проверил это.

@Inject 
private Logger logger; 
List<Book> inventory = new ArrayList<>(); 

public void addBook(@Observes @Added Book book) { 
    logger.warning("adding book" + book.getTitle()); 
    inventory.add(book); 
} 

public void removeBook(@Observes @Removed Book book) { 
    logger.warning("remove book"); 
} 

Таким образом, эта линия: общественная пустота addBook (@Observes @Added Книга книга) {

и это как: общественная пустота removeBook (@Observes @Removed Книга книга) {

отмечены со следующей ошибкой: аннотация @Added (@Removed) не разрешена для этого местоположения.

И вот код, который определяет методы addBook и removeBook. Здесь нет проблем.

@Inject 
@Added 
private Event<Book> bookAddedEvent; 

@Inject 
@Removed 
private Event<Book> bookRemovedEvent; 

public Book createBook(String title, float price, String description) { 
    Book book = new Book(title, price, description); 
    book.setNumber(numberGenerator.generateNumber()); 

    bookAddedEvent.fire(book); 
    return book; 
} 

public void deleteBook(Book book) { 
    bookRemovedEvent.fire(book); 
} 

ответ

4

Что такое определение ваших квалификационных аннотациями @Added и @Removed?

Вы, вероятно, отсутствует PARAMETER запись в @Target списке:

@Target({ TYPE, METHOD, PARAMETER, FIELD }) 
+0

Человек ... ты величайший! Благодарю. У меня был только @Target ({TYPE, FIELD, METHOD}) '. – Gica

Смежные вопросы