java - 如何解决此 "cannot be cast to"异常?

标签 java casting classcastexception

我收到以下异常:

java.lang.ClassCastException: org.apache.commons.dbcp.DelegatingStatement cannot be cast to org.apache.tomcat.dbcp.dbcp.DelegatingStatement
    optimise.database.ProdigyDB.doInsertSerial(ProdigyDB.java:139)
    optimise.stock.CurrentRequest.writeRequest(CurrentRequest.java:145)
    optimise.stock.SubmitOrderServlet.processRequest(SubmitOrderServlet.java:51)
    optimise.stock.SubmitOrderServlet.doPost(SubmitOrderServlet.java:188)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    optimise.stock.AuthFilter.doFilter(AuthFilter.java:69)

代码行是这样的:

 serial = ((com.informix.jdbc.IfmxStatement) ((org.apache.tomcat.dbcp.dbcp.DelegatingStatement) statement).getDelegate()).getSerial();

完整的函数是这样的:

public static int doInsertSerial(String sql) {
    int serial = 0;

    try {
        Connection connection = getConnection();
        java.sql.Statement statement = connection.createStatement();
        statement.executeUpdate(sql);

        serial = ((com.informix.jdbc.IfmxStatement)((org.apache.tomcat.dbcp.dbcp.DelegatingStatement) statement).getDelegate()).getSerial();

        statement.close();
        connection.close();
    } catch (SQLException e) {
        throw new RuntimeException("SQL Update Exception\n" + sql, e);                
    }

    return serial;
}

这很神秘,因为相同的代码在 Unix SCO5 服务器上部署时工作正常,但在 Linux Red Hat 服务器上却出错。

非常感谢任何帮助。

谢谢。


深入研究一下,我发现 DelegatingStatement 类显示了一个错误:

public class DelegatingStatement extends AbandonedTrace implements Statement {

org.apache.commons.dbcp.DelegatingStatement 不是抽象的,不会覆盖 java.sql.Statement 中的抽象方法 isPoolable()

我不明白为什么会这样。

最佳答案

java.lang.ClassCastException: org.apache.commons.dbcp.DelegatingStatement cannot be cast to org.apache.tomcat.dbcp.dbcp.DelegatingStatement

DelegatingStatement 类的包不同。 org.apache.commons.dbcp & org.apache.tomcat.dbcp.dbcp 是两个不同的包,提供两个不同的 DelegatingStatement 类。您将收到 ClassCastException,因为 JVM 根本不将它们视为同一类型。

查看导入的DelegatingStatement类包。根据代码 应导入 org.apache.tomcat.dbcp.dbcp 包。

同时检查 this & this

关于java - 如何解决此 "cannot be cast to"异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31379629/

相关文章:

java - 使 JDOM 动态添加新元素

rust - rust 类型类型转换选项

java - 当我们只有 .class 文件时如何转换对象?

javascript - 在 JS 中寻找类型转换规则

带有空消息和原因的 java.lang.ClassCastException

java - InterruptedException 未被捕获

java - 这些对象会被GC回收吗?

java - 在 Java 中使用 Duration 对象将天、分钟、小时转换为秒失败

java - 即使没有强制转换也会抛出 ClassCastException

java - 我需要帮助在 Java 中的 JPanel 上实现 A* 算法