我有一个使用参数Executor调用接口实例的类。IService<T>KeyList<T>
class Executor{
KeyList<?> _keys;
IService<?> _service;
public Executor(IService<?> service, KeyList<?> keys){
_service = service;
_keys = keys;
}
public void execute(){
_service.invoke(_keys);
}
}
interface IService<T>{
public void invoke( KeyList<T> keys);
}
class KeyList<T> {
List<T> _list;
}
我使用<?>了 Executor 的成员,因为它不关心 IService 和 KeyList 是如何参数化的,但是下面会引发编译错误,说明参数不适用:
public void execute(){
_service.invoke(_keys); //error on invoke
}
我猜这是在抱怨,因为KeyList<?>不等于KeyList<T>,但<?>等于<? extends Object>,所以我有点困惑。有更好的选择吗?