7

次のクラスを定義しました。

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);
4

1 に答える 1