我已经跟踪了我正在开发的应用程序的问题,它给了我一个类型转换异常。有趣的是,它说不能投“实体。电影不能投给实体。电影”?!电影是一个ArrayList。
try {
movies = getMovies();
} catch (Exception e) {
e.printStackTrace(System.out);
} finally {
try {
for (Movie movie : movies) {
output.append(" <tr>\n");
output.append(" <td>" + movie.getId() + "</td>");
output.append(" </tr>\n");
}
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
答案 0 :(得分:7)
听起来像是一个类加载器冲突。由不同类加载器加载的相同类定义被JVM视为两个不同的类。
有了这些小信息,没有什么可说的了。有关类加载器及其问题的详细信息,请参阅this article。
答案 1 :(得分:4)
可能是类加载器问题(如果您的应用程序有多个)
在调试器中,查看电影成员的getClass()调用中的Class对象,并将其与本地构造的Movie对象进行比较。
如果它们不同,那么可以让您跟踪正在发生的事情。类对象将允许您查看哪个类加载器已加载定义。
如果加载了两个不同的类定义,则需要跟踪两次加载JAR文件的位置。
答案 2 :(得分:0)
除了类加载器问题之外,我怀疑您还在某个涉及Collection<Movie>
实例或类似情况的地方进行了一些不安全的类型转换。
答案 3 :(得分:0)
检查两个类是否都使用相同版本的Java进行编译。
答案 4 :(得分:0)
我也怀疑是一个类加载器问题,但你也可以检查一下你是否遇到了serialversionuid问题。
答案 5 :(得分:0)
另一种可能性,如果你有任何代码生成(例如来自ORM),那就是IDE与磁盘上的文件不一致,在这种情况下刷新IDE项目并进行干净的构建可能有所帮助。 / p>
如果没有,你实际上在不同的包中有两个同名的类吗?如果是这样的话,可能是因为你导入了“错误的”而试图从一个投射到另一个。