我已經定義了以下類: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