こんにちは、私はWeld(CDI)イベントに基づくEventBuilderを実装しようとしています。Generics and Qualifiers
私は、パラメータqualifierClassをinfをespecified(選ばれた修飾子を指定して、私のイベントを構築するには、次のメソッドを作成し
@SuppressWarnings("serial")
public static <T extends custom.Event, Q extends Qualifier>
Event<T> buildEvent(Event<T> event, Class<Q> qualifierClass) {
return event.select(new AnnotationLiteral<Q>(){});
}
私の修飾子は、次のコードを持っています。
@Qualifier
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface TicketSuccessfulValidation {
}
その後、私が使用してみてください次のような方法です:
@Inject Event<TicketEvent> event;
private Map<String, User> loggedUsers = new HashMap<String, User>(0);
public User retrieveUserByTicket(String ticket) {
User user = this.loggedUsers.get(ticket);
if (user != null) {
buildEvent(event, TicketSuccessfulValidation.class).fire(new TicketEvent("12345"));
return user;
} else {
throw new TicketNotFoundException();
}
}
私の日食は次のようになりますメッセージ:
Bound mismatch: The generic method buildEvent(Event<T>, Class<Q>) of type AbstractEventBuilder is not applicable for the arguments (Event<TicketEvent>, Class<TicketSuccessfulValidation>). The inferred type TicketSuccessfulValidation is not a valid substitute for the bounded parameter <Q extends Qualifier>
私TicketSuccessfulValidationはそれがあると言って@Qualifierその権利はないと注釈されている場合は、修飾子を拡張しますか?なぜTicketSuccessfulValidationは "Q extends Qualifier"の代用として有効ではないのですか?
ご協力いただきありがとうございます。
これは、アノテーションではなく、「マーカーアノテーションを使用してタイプを定義する」という彼の項目37で、Josh Blochがアドバイスしている理由です。引数に特定の注釈を付ける必要があるパラメータを宣言する方法はありません。それは残念です。 –