問題はExecutors.newSingleThreadScheduledExecutor();
が実際にScheduledThreadPoolExecutor
を返さないということです。 Executors
クラスの
Source code:
public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
return new DelegatedScheduledExecutorService
(new ScheduledThreadPoolExecutor(1));
}
Delegated...
クラスは(あまりにもDelegatedExecutorService
ありますが)ただ、この場合には、基本となるエグゼキュータにScheduledThreadPoolExecutor
をすべてのコールを渡しています。コード内のコメントは、これらのクラスのポイントは、基本となるエグゼキュータが持つ可能性があるすべての非インターフェイスメソッドを非表示にすることです。いずれの場合においても
、それはあなたが作業しているというオブジェクトのクラスのバージョンよりもインターフェース(List
ないArrayList
、ScheduledExecutorService
なくScheduledThreadPoolExecutor
)を使用することをとにかく良く練習です。
ScheduledThreadPoolExecutor
で利用可能な機能があり、ScheduledExecutorService
では使用できない機能が絶対に必要な場合は、ScheduledThreadPoolExecutor
のコンストラクタを使用してそのインスタンスを作成できます。
をインタフェースを実装するクラスは、インターフェイスにはない、他のメソッドやフィールドを持つことができます:簡単にするために
偉大な、私はそれについて間違った方法を行っていたのを見て、ありがとう!いくつかの考えの後、私は理由を参照してください。 – Constantin