当在 CDI 中对事件使用自定义注释时,此位置不允许使用注释“@Added”
The annotation "@Added" is disallowed for this location, when using custom annotation with events in CDI
在 @Observes 限定符附近使用自定义限定符来捕获事件时出现此编译错误。
所有 类 都在同一个包中,所以问题不在于导入语句。我已经检查过了。
@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");
}
所以,这一行: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);
}
您的限定符注释 @Added
和 @Removed
的定义是什么?
您可能缺少 @Target
列表中的 PARAMETER
条目:
@Target({ TYPE, METHOD, PARAMETER, FIELD })
在 @Observes 限定符附近使用自定义限定符来捕获事件时出现此编译错误。
所有 类 都在同一个包中,所以问题不在于导入语句。我已经检查过了。
@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");
}
所以,这一行: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);
}
您的限定符注释 @Added
和 @Removed
的定义是什么?
您可能缺少 @Target
列表中的 PARAMETER
条目:
@Target({ TYPE, METHOD, PARAMETER, FIELD })