我有以下代码:
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 类内部运行。)
The MyObj.all().fetch()
返回某种包含所有内容的 IterableMyObj
数据库中的对象。MyObj
从 Play! 继承此方法!框架的模型类,如果重要的话。这就是为什么它返回一个列表Object
s 而不是MyObj
s,我无法改变它的工作方式。
那么,有什么原因我无法回传吗?MyObj
?我可以看到从一个Object
,但是Java似乎知道该对象曾经是什么类。
Thanks!
看来您有类加载器问题。 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
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)