返回基于内部边界的类型

时间:2015-02-05 01:15:29

标签: java generics

我有一种方法可以检索注册了侦听器服务的相关“插件”:

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中的其他魔法实现吗?

1 个答案:

答案 0 :(得分:1)

想出来了!

只需制定一个你将在内部界限中使用的界限:

public static <T extends Plugin> T getRegisteringPlugin(Class<? extends SubListener<T>> listener) {//...