次のように、Java の ThreadFactory.newThread(Runnable r) から返された Thread オブジェクトを、Android アプリケーションが使用する Thread の特定のサブクラスにキャストしようとしています。
private ThreadFactory mvThreadSource = Executors.defaultThreadFactory();
...
//Invokes the thread factory's newThread(Runnable r) method
//mvThreadsVector is an ArrayList<BackgroundThread>
//class BackgroundThread extends Thread and implements an interface
public void spawnBGThreads(int numThreads){
for (int i=0;i<numThreads;i++){
mvThreadsVector.add((BackgroundThread) mvThreadSource.newThread(new
BackgroundThread()));
}
}
これにより、クラス キャストの例外がスローされますが、その理由はわかりません。実行できないダウンキャストを試みているように見えますが、mvThreadSource.newThread(new BackgroundThread()) によって返される Thread は、実際には BackgroundThread のインスタンスである必要があります。私の理解では、これにより、上記のように「ダウンキャスト」することが合法になるはずですが (実際にはダウンキャストであってはならないため)、Android ランタイム (SDK リビジョン 17 をターゲットとする) は同意しません。上記のキャストについて何が違法ですか? どの代替アプローチを使用する必要がありますか (できれば、ThreadFactory を拡張する独自の BackgroundThreadFactory クラスを作成しないでください)。