当对CDI中的事件使用自定义注释时,不允许对此位置使用注释"@Added"

Gic*_*ica 2 java events cdi

在@Observes限定符附近使用自定义限定符来捕获事件时,我有这个编译错误.

所有类都在同一个包中,因此问题不在于import语句.我已经检查过了.

@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");
}
Run Code Online (Sandbox Code Playgroud)

所以,这一行:public void addBook(@Observes @Added Book book){

这就像:public void removeBook(@Observes @Removed Book book){

标记有以下错误:此位置不允许使用注释@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);
}
Run Code Online (Sandbox Code Playgroud)

Har*_*ann 7

什么是你的预选赛注释的定义@Added@Removed

你可能错过PARAMETER@Target列表中的条目:

@Target({ TYPE, METHOD, PARAMETER, FIELD })
Run Code Online (Sandbox Code Playgroud)