Java 泛型和限定词

Java 泛型和限定词,java,generics,jakarta-ee,cdi,Java,Generics,Jakarta Ee,Cdi,嗨,我正在尝试实现一个基于焊接(CDI)事件的EventBuilder 我创建了以下方法来使用所选的限定符(特别是参数限定符类)构建我的事件 @SuppressWarnings("serial") public static <T extends custom.Event, Q extends Qualifier> Event<T> buildEvent(Event<T> event, Class<Q> qualifierClass) {

嗨,我正在尝试实现一个基于焊接(CDI)事件的EventBuilder

我创建了以下方法来使用所选的限定符(特别是参数限定符类)构建我的事件

@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>(){});
}
然后我试着用这样的方法:

@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();
    }
}
@注入事件;
私有映射loggedUsers=newhashmap(0);
公共用户检索UserByTicket(字符串票证){
User User=this.loggedUsers.get(票证);
如果(用户!=null){
buildEvent(event,ticketsuccessfulvalization.class).fire(新TicketEvent(“12345”));
返回用户;
}否则{
抛出新的TicketNotFoundException();
}
}
然后,我的eclipse给了我以下消息:

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>
绑定不匹配:AbstractEventBuilder类型的泛型方法buildEvent(Event,Class)不适用于参数(Event,Class)。推断的类型TicketSuccessfulValidation不是绑定参数的有效替代品
如果我的ticketsuccessfulvalization用@Qualifier注释,那么说它是extends Qualifier是不对的?为什么ticketsuccessfulvalization不是“Q extends Qualifier”的有效替代品


提前感谢您的帮助。

Q扩展限定符
显然意味着您通过的课程必须扩展限定符)


但是,
ticketsuccessfulvalization
不扩展
限定符
,而是注释为一。注释不是由泛型计算的。

Q扩展限定符
显然意味着您传递的类必须扩展限定符)


但是,
ticketsuccessfulvalization
不扩展
限定符
,而是注释为一。注释不是由泛型来评估的。

这就是为什么Josh Bloch在其第37项中建议我们“使用标记注释来定义类型”,而不是注释。无法声明要求参数具有特定注释的参数。这就是为什么Josh Bloch在他的第37项中建议我们“使用标记注释来定义类型”,而不是注释。无法声明要求参数具有特定注释的参数。真可惜。
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>