Return 基于内部边界的类型
Return a type based on inner bounding
我有一个方法可以检索注册侦听器服务的相关 "Plugin":
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);
}
但是,我想知道是否有一种方法可以 return 基于 SubListener 的内部边界,例如在伪代码中:
public static <T extends SubListener<E extends Plugin>> E getRegisteringPlugin(Class<T> plugin) {
return ListenerManager.getPair(listener).<E>getPlugin();
}
我实际上无法在 SubListener<?>
内指定一个新的泛型类型边界,所以这是否可以通过助手 类 或 Java 中的其他魔法来实现?
想通了!
只需创建一个稍后将在内部边界中使用的边界:
public static <T extends Plugin> T getRegisteringPlugin(Class<? extends SubListener<T>> listener) {//...
我有一个方法可以检索注册侦听器服务的相关 "Plugin":
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);
}
但是,我想知道是否有一种方法可以 return 基于 SubListener 的内部边界,例如在伪代码中:
public static <T extends SubListener<E extends Plugin>> E getRegisteringPlugin(Class<T> plugin) {
return ListenerManager.getPair(listener).<E>getPlugin();
}
我实际上无法在 SubListener<?>
内指定一个新的泛型类型边界,所以这是否可以通过助手 类 或 Java 中的其他魔法来实现?
想通了!
只需创建一个稍后将在内部边界中使用的边界:
public static <T extends Plugin> T getRegisteringPlugin(Class<? extends SubListener<T>> listener) {//...