Ich habe folgende Klassen definiert:Java Generics - Folgern verschachtelten Typ
class Operation<S>
class GetReservationOperation extends Operation<Reservation>
Jetzt würde ich eine Klasse wie diese haben mag:
OperationExecutor<T extends Operation<S>> extends AsyncTask<T,Void,S>{
@Override
protected S doInBackground(T... params) {
return null;
}
}
Aber das wird nicht kompilieren:
OperationExecutor<GetReservationOperation> executor = new ....
Warum lässt Java dies nicht zu?
Nach einiger Zeit, die ich mit der folgenden Lösung kam:
OperationExecutor<T extends Operation<S>,S> extends AsyncTask<T,Void,S>{
@Override
protected S doInBackground(T... params) {
return null;
}
}
Aber das zwingt mich folgendes zu schreiben:
OperationExecutor<GetReservationOperation,Reservation> executor = new ....
Welche seltsam aussieht. Gibt es eine Möglichkeit, es schöner aussehen zu lassen?
EDIT Das funktionierte
OperationExecutor<S> extends AsyncTask<Operation<S>,Void,S>{
@Override
protected S doInBackground(Operation<S>... params) {
return null;
}
}
OperationExecutor<Reservation> executor = new ....
executor.execute(getReservationOperation);
Das ist der Grund, warum das Schlüsselwort 'var' in C# so nützlich ist. Leider scheint Java das zu vermissen. –
Also was versteckt sich hinter '...'? Das gleiche wie deine Deklaration? –
@HighCore Welches ist nicht wirklich relevant so .... – Zyerah