【发布时间】:2021-09-05 00:20:10
【问题描述】:
所以我有几节课:
public abstract class IEventExecutor<A extends Event> implements EventExecutor {
public final Class<A> type;
public IEventExecutor(Class<A> type){
this.type = type;
}
public abstract void event(A a);
@Override
public void execute(Listener listener, Event event) throws EventException{
event((A) event);
}
}
public class PluginExtension extends Plugin {
public void register(IEventExecutor<? extends Event> executor){
EventExecutor e = executor;
EventManager.registerEvent(executor.type, EventPriority.NORMAL, e, system);
}
}
registerEvent 方法:
void registerEvent(@NotNull Class<? extends Event> class_, @NotNull Listener listener, @NotNull EventPriority eventPriority, @NotNull EventExecutor eventExecutor, @NotNull Plugin plugin);
在 registerEvent 类中 extends Event> 是必需的,但 executor.type 提供 Class
【问题讨论】:
-
你能出示
registerEvent的声明吗? -
我在问题中添加了声明。
-
这里的问题是Java编译器,它在内部注册方法中使用
<capture #1 of ? extends Event>作为?类型的名称,不知道也不能推断出类型传递给该方法实际上与registerEvent方法所期望的相同,因此会引发该异常。另请参阅this excellent answer。 -
@RomanVottner N.B.没有抛出异常;这是一个编译时错误。
-
@chrylis-cautiouslyoptimistic- 你当然是对的。应该再读一遍评论
标签: java