2017-11-15 2 views
1

Erforschen der Klassen in Guava, um die Vorteile zu verstehen, was Guava bringt, obwohl mit der Einführung von Java 8, es jetzt nicht so viel Rolle spielt, aber ich frage mich immer noch, wie ListenableFuture eingeführt wird.Wie kann Guava die Zukunft in eine hörbare Zukunft lenken?

in AbstractListeningExecutorService gibt es Code-Schnipsel wie folgt aus:

@Override 
    public ListenableFuture<?> submit(Runnable task) { 
    return (ListenableFuture<?>) super.submit(task); 
    } 

hier super die Superklasse von AbstractListeningExecutorService zeigt an, nämlich ExecutorService, aber wie können wir werfen nur eine übergeordnete Klasse (Zukunft) zu einer Unterklasse (ListenableFuture) so was ?

Antwort

3

Sie sind der direkte Ober von AbstractListeningExecutorService ist AbstractExecutorService bemerken, die

Standardimplementierungen von ExecutorService Ausführungsmethoden zur Verfügung stellt. Diese Klasse implementiert die einreichen, invokeAny und invokeAll Methoden einer von newTaskForRunnableFuture zurück verwenden, die standardmäßig auf die FutureTask Klasse in diesem Paket zur Verfügung gestellt.

Das Standard AbstractListeningExecutorService in außer Kraft gesetzt wird

Zusammenfassung ListeningExecutorService Implementierung, die es zu ListenableFuture Instanzen für jede Runnable und Callable vorgelegt schafft

Sie können auch im Quelltext sehen, dass Sie sind mit

verbunden
/** @since 19.0 (present with return type {@code ListenableFutureTask} since 14.0) */ 
    @Override 
    protected final <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) { 
    return TrustedListenableFutureTask.create(runnable, value); 
    } 

Die create gibt einen TrustedListenableFutureTask Wert zurück, der ein Untertyp von ListenableFuture ist.

Diese Methoden in AbstractListeningExecutorService sind neu deklariert, so dass ihre Rückgabetyp spezifischer gemacht werden kann, dh. ListenableFuture.

Da super.submit(..) hat einen Rückgabetyp Future, muss der Rückgabewert auf den entsprechenden Subtyp gegossen werden, das heißt. ListenableFuture in diesem Fall. Und da alle Aufrufe die von erstellte Instanz zurückgeben, ist bekannt, dass es sich um Instanzen des Typs ListenableFuture handelt. Die Besetzung ist daher sicher.

+0

Lesen Sie einfach die Vorlage Methode Muster, aber nicht ihre Anwendung so, danke – javarookie

Verwandte Themen