gpt4 book ai didi

即使从父类转换实际上是转换为子类的实例,也会抛出 Java Class Cast Exception

转载 作者:行者123 更新时间:2023-11-29 10:03:50 25 4
gpt4 key购买 nike

我正在尝试将返回的 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,它将在启动时调用 BackgroundThreadrun() 方法。

您可能想要做的是创建您自己的 ThreadFactory 实现来创建 BackgroundThread

关于即使从父类转换实际上是转换为子类的实例,也会抛出 Java Class Cast Exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14761521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com