使用java for-each循环键入转换问题

时间:2010-05-20 09:56:40

标签: java foreach entity casting

我已经跟踪了我正在开发的应用程序的问题,它给了我一个类型转换异常。有趣的是,它说不能投“实体。电影不能投给实体。电影”?!电影是一个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);
         }
     }

6 个答案:

答案 0 :(得分:7)

听起来像是一个类加载器冲突。由不同类加载器加载的相同类定义被JVM视为两个不同的类。

有了这些小信息,没有什么可说的了。有关类加载器及其问题的详细信息,请参阅this article

另见earlier answer of mine to a similar problem

答案 1 :(得分:4)

可能是类加载器问题(如果您的应用程序有多个)

在调试器中,查看电影成员的getClass()调用中的Class对象,并将其与本地构造的Movie对象进行比较。

如果它们不同,那么可以让您跟踪正在发生的事情。类对象将允许您查看哪个类加载器已加载定义。

如果加载了两个不同的类定义,则需要跟踪两次加载JAR文件的位置。

答案 2 :(得分:0)

除了类加载器问题之外,我怀疑您还在某个涉及Collection<Movie>实例或类似情况的地方进行了一些不安全的类型转换。

答案 3 :(得分:0)

检查两个类是否都使用相同版本的Java进行编译。

答案 4 :(得分:0)

我也怀疑是一个类加载器问题,但你也可以检查一下你是否遇到了serialversionuid问题。

答案 5 :(得分:0)

另一种可能性,如果你有任何代码生成(例如来自ORM),那就是IDE与磁盘上的文件不一致,在这种情况下刷新IDE项目并进行干净的构建可能有所帮助。 / p>

如果没有,你实际上在不同的包中有两个同名的类吗?如果是这样的话,可能是因为你导入了“错误的”而试图从一个投射到另一个。