次のクラスを定義しました。
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);