我有一个使用参数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>
,所以我有点困惑。有更好的选择吗?