我已经定义了以下类:Java泛型 - 推断嵌套类型
class Operation<S>
class GetReservationOperation extends Operation<Reservation>
现在,我想有这样一个类:
OperationExecutor<T extends Operation<S>> extends AsyncTask<T,Void,S>{
@Override
protected S doInBackground(T... params) {
return null;
}
}
但这不会编译:
OperationExecutor<GetReservationOperation> executor = new ....
为什么不是Java允许这样做?
一段时间后,我想出了以下解决方案:
OperationExecutor<T extends Operation<S>,S> extends AsyncTask<T,Void,S>{
@Override
protected S doInBackground(T... params) {
return null;
}
}
但是,这迫使我写:
OperationExecutor<GetReservationOperation,Reservation> executor = new ....
这看起来很奇怪。有什么办法让它看起来更好吗?
编辑 这个工作
OperationExecutor<S> extends AsyncTask<Operation<S>,Void,S>{
@Override
protected S doInBackground(Operation<S>... params) {
return null;
}
}
OperationExecutor<Reservation> executor = new ....
executor.execute(getReservationOperation);
这就是为什么关键字'var'在C#中非常有用的原因。不幸的是,java似乎缺乏这一点。 – 2013-04-25 20:52:46
那么隐藏在'...'背后的是什么?和你的声明一样吗? – 2013-04-25 20:54:03
@HighCore这不是真的有意义,所以...... – Zyerah 2013-04-25 21:05:55