gpt4 book ai didi

java - 转换回原始类时出现 ClassCastException 错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:47 26 4
gpt4 key购买 nike

我有以下代码:

public void doJob() {
MyObj s;

for ( Object o : MyObj.all().fetch()) {
s = (MyObj) o; // ClassCastException here

if (!s.fileExists()) {
//Do some stuff
}
}
}

这是抛出这个异常:

play.exceptions.JavaExecutionException: models.MyObj cannot be cast to models.MyObj
at play.jobs.Job.call(Job.java:155)
at Invocation.Job(Play!)
Caused by: java.lang.ClassCastException: models.MyObj cannot be cast to models.MyObj
at jobs.OrphanSurveys.doJob(OrphanSurveys.java:18)
at play.jobs.Job.doJobWithResult(Job.java:50)
at play.jobs.Job.call(Job.java:146)
... 1 more

(如果重要的话,此方法在 Play Job 类中运行。)

MyObj.all().fetch() 返回某种类型的 Iterable,其中包含数据库中的所有 MyObj 对象。 MyObj 从 Play!框架的模型类,如果重要的话。这就是为什么它返回 Object 而不是 MyObj 列表的原因,而且我无法更改它的工作方式。

那么,是否有某些原因导致我无法转换回 MyObj?我可以看到如何从 Object 中强制转换,但 Java 似乎知道对象的类曾经是什么。

谢谢!

最佳答案

看起来您有类加载器问题。您的 fetch() 方法返回的对象加载到与当前线程中用于尝试和转换的类加载器不同的类加载器中。

试试这个来确认。将这三行代码添加到您现有的代码中。

for ( Object o : MyObj.all().fetch()) {
// Check classloaders
System.out.println(o.getClass().getClassLoader());
System.out.println(MyObj.class.getClassLoader());
break;
//
s = (MyObj) o; // ClassCastException here

if (!s.fileExists()) {
//Do some stuff
}
}

关于java - 转换回原始类时出现 ClassCastException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7432410/

26 4 0