【问题标题】:Type casting problem with java for-each loopjava for-each循环的类型转换问题
【发布时间】:2010-05-20 09:56:40
【问题描述】:

我发现我正在开发的应用程序存在问题,它给了我一个类型转换异常。有趣的是它说它不能投射“entities.Movie 不能投射到entities.Movie”?! movies 是一个 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);
         }
     }

【问题讨论】:

  • 同意彼得的观点,换句话说,检查你的进口
  • 听起来像一个网络应用程序。如果这是真的,1)不要打印异常,抛出它们。 2)servlet/business层不要打印HTML,使用JSP。

标签: java foreach entity casting


【解决方案1】:

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

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

另见earlier answer of mine to a similar problem

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      除了类加载器问题,我怀疑您还在某处进行了一些不安全的类型转换,涉及Collection&lt;Movie&gt; 实例或类似实例。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 类可以用不同的版本编译而不会导致ClassCastException。如果您使用更新的版本进行编译并尝试在早期的 JVM 上运行,您将获得 UnsupportedClassVersionError
        【解决方案5】:

        我也怀疑是类加载器问题,但您也可以检查一下是否没有 serialversionuid 问题。

        【讨论】:

          【解决方案6】:

          如果您正在进行任何代码生成(例如从 ORM),另一种可能性是 IDE 与磁盘上的文件不同步,在这种情况下刷新 IDE 项目并进行干净的构建可能会有所帮助。

          如果没有,您实际上在不同的包中有两个同名的类吗?如果是这样,可能是因为您导入了“错误”的,所以尝试从一个转换到另一个。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-01
            • 2015-11-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多