Reputation: 11483
I have a method for retrieving the relevant "Plugin" that registered a listener service:
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);
}
However, I'm wondering if there's a way to return based on the inner bounding of the SubListener, for instance in pseudocode:
public static <T extends SubListener<E extends Plugin>> E getRegisteringPlugin(Class<T> plugin) {
return ListenerManager.getPair(listener).<E>getPlugin();
}
I can't actually specify a new generic type bounding inside of the SubListener<?>
, so is this possible to implement through helper classes or some other magic in Java?
Upvotes: 1
Views: 53
Reputation: 11483
Figured it out!
Simply make a bound that you'll use later in your inner bound:
public static <T extends Plugin> T getRegisteringPlugin(Class<? extends SubListener<T>> listener) {//...
Upvotes: 1