ho definito seguenti classi:Java generici - inferendo nidificato tipo
class Operation<S>
class GetReservationOperation extends Operation<Reservation>
Ora vorrei avere una classe come questa:
OperationExecutor<T extends Operation<S>> extends AsyncTask<T,Void,S>{
@Override
protected S doInBackground(T... params) {
return null;
}
}
ma questo non sarà la compilazione:
OperationExecutor<GetReservationOperation> executor = new ....
Perché Java non lo consente?
Dopo qualche tempo mi si avvicinò con la seguente soluzione:
OperationExecutor<T extends Operation<S>,S> extends AsyncTask<T,Void,S>{
@Override
protected S doInBackground(T... params) {
return null;
}
}
Ma questo mi costringe a scrivere il seguente:
OperationExecutor<GetReservationOperation,Reservation> executor = new ....
che sembra strano. C'è un modo per renderlo più bello?
EDIT questo ha funzionato
OperationExecutor<S> extends AsyncTask<Operation<S>,Void,S>{
@Override
protected S doInBackground(Operation<S>... params) {
return null;
}
}
OperationExecutor<Reservation> executor = new ....
executor.execute(getReservationOperation);
Questo è il motivo per cui la parola chiave 'var' è così utile in C#. Sfortunatamente a java sembra mancare quello. –
Quindi cosa si nasconde dietro '...'? Lo stesso della tua dichiarazione? –
@HighCore Che non è veramente rilevante quindi ... – Zyerah