我使用两个接口:
public interface Receiver<T> {
public void receive(T obj);
public Set<Class<? extends T>> getInterests();
}
public interface Distributor<T> extends Receiver<T> {
public void register(Receiver<T> receiver);
}
Run Code Online (Sandbox Code Playgroud)
我想在分销商中注册分销商的问题,例如
Distributor<Object>== register ==>Distributor<String>
我的第一个想法是将寄存器方法更改为register(Receiver<? extends T> receiver).但是如果我想获取类,那么接收器对方法有兴趣,getInterests会返回类似的东西
Set<Class<? extends ? extends T>>.间接我得到的东西,Set<Class<? extends T>>但我经历过,在Java中不可能使用transitiv通配符.
有人有个主意吗?
编辑:举个例子:
public void register(Receiver<? extends T> receiver){
Set<Class<? extends T>> interests = receiver.getInterests();
//Problem because receiver.getInterests is
//Set<Class<? extends ? extends T>>
...
}
Run Code Online (Sandbox Code Playgroud)