我有一种方法可以检索注册了侦听器服务的相关“插件”:
private static final Map<Class<? extends SubListener>, ListenerPluginPair<?>> listeners = new HashMap<>();
//Retrieves registering plugin
public static <T extends SubListener<?>> Plugin getRegisteringPlugin(Class<T> listener) {
return ListenerManager.getPair(listener).getPlugin();
}
private static <T extends SubListener<?>> ListenerPluginPair<?> getPair(Class<T> listener) {
Validate.isTrue(ListenerManager.isRegistered(listener), "Class is not registered with listener manager!");
return ListenerManager.listeners.get(listener);
}
但是,我想知道是否有一种方法可以根据SubListener的内部边界返回,例如在伪代码中:
public static <T extends SubListener<E extends Plugin>> E getRegisteringPlugin(Class<T> plugin) {
return ListenerManager.getPair(listener).<E>getPlugin();
}
我实际上无法在SubListener<?>
内部指定新的泛型类型,所以这可以通过辅助类或Java中的其他魔法实现吗?
答案 0 :(得分:1)
想出来了!
只需制定一个你将在内部界限中使用的界限:
public static <T extends Plugin> T getRegisteringPlugin(Class<? extends SubListener<T>> listener) {//...