あなたはAbstractListeningExecutorService
の直接のスーパークラスが
がExecutorService
実行メソッドのデフォルト実装を提供しますAbstractExecutorService
でわかります。 このクラスは、newTaskFor
によって返さRunnableFuture
を使用して提出し、invokeAny
とinvokeAll
方法 を実装したこのパッケージで提供 FutureTask
デフォルトはclass。
デフォルトは に提出し、各Runnable
とCallable
ため ListenableFuture
のインスタンスを作成します
抽象ListeningExecutorService
実装でオーバーライドされていること、それは
また、ソースコードのそれを見ることができます
にリンクしています
/** @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);
}
そのcreate
はTrustedListenableFutureTask
の値を返します。サブタイプはListenableFuture
です。
AbstractListeningExecutorService
のこれらのメソッドは、戻り値の型がより具体的になるように再宣言されています。 ListenableFuture
。
super.submit(..)
の戻り値の型がFuture
であるため、戻り値は適切なサブタイプにキャストする必要があります。この場合はListenableFuture
です。また、すべての呼び出しがnewTaskFor
によって作成されたインスタンスを返すので、それらはListenableFuture
のインスタンスになることがわかります。したがって、キャストは安全です。
ちょうどテンプレートメソッドのパターンを読んで、このようなアプリケーションを実現していない、ありがとう – javarookie