gpt4 book ai didi

java - 泛型和限定符

转载 作者:行者123 更新时间:2023-12-01 19:15:46 25 4
gpt4 key购买 nike

您好,我正在尝试实现基于焊接 (CDI) 事件的 EventBuilder。

我创建了以下方法来使用所选限定符(在参数 qualifierClass 中指定)构建我的事件。

@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();
}
}

我的 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>

如果我的 TicketSuccessfulValidation 带有 @Qualifier 注释,那么说它扩展了 Qualifier 是不对的吗?为什么 TicketSuccessfulValidation 不能有效替代“Q extends Qualifier”?

预先感谢您的帮助。

最佳答案

Q extends Qualifier 显然意味着您传递的类必须扩展 Qualifier。 :)

但是,TicketSuccessfulValidation 并未扩展 Qualifier,但被注释为一个。泛型不评估注释。

关于java - 泛型和限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com