Ho iniziato a lavorare su un progetto esistente (un sdk) al lavoro, e la base di codice utilizza gli ascoltatori come se non ci fosse un domani. Praticamente ogni secondo metodo richiede una sorta di argomento listener e devo ancora trovare un'occorrenza in cui il listener non è la classe chiamante o una classe anonima dichiarata quando viene chiamato il metodo.
La mia domanda è: quando / perché è appropriato usare Listener su Future < > in questo modo?
// Util methods
static void postSuccess(Listener listener, Object object) {
Util.runOnUI(() -> { listener.success(object); });
}
static void postError(Listener, Exception ex) {
Util.runOnUI(() -> { listener.failure(ex); });
}
void foo ( Bar bar, Listener listener ) {
executor.submit(() -> {
try {
// work_on() is a potentially long running function
Result res = work_on( bar );
Util.postSuccess(listener, res)
}
catch (Exception ex) {
Util.postError(listener, ex);
}
}
}
Nel codice precedente il chiamante non ha alcun controllo su quando viene richiamato il metodo del listener. Il seguente codice consentirebbe al chiamante di decidere se attendere o controllare più tardi e generalmente sembra fornire un maggiore controllo:
Future<Result> foo ( Bar bar ) {
return executor.submit(() -> { return workOn( bar ) };
}
Mi scuso se mi manca qualcosa di ovvio, sono solo fuori dal college per tre mesi, ma questo codice di ascolto mi fa male.