我正在尝试将返回的 Thread 对象从 Java 的 ThreadFactory.newThread(Runnable r) 转换为我的 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 类)?
最佳答案
ThreadFactory
围绕 Runnable
包装一个线程。因此,它正在创建一些其他类型的 Thread
,它将在启动时调用 BackgroundThread
的 run()
方法。
您可能想要做的是创建您自己的 ThreadFactory
实现来创建 BackgroundThread
。
关于即使从父类转换实际上是转换为子类的实例,也会抛出 Java Class Cast Exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14761521/