【问题标题】:Class that implements an interface in a jar, but does not override the methods在 jar 中实现接口但不覆盖方法的类
【发布时间】:2014-09-26 16:11:37
【问题描述】:

我的项目依赖于 apache commons-dbcp,我们使用的是 1.2.2 版本

我们使用的 commons-dbcp 版本有类org.apache.commons.dbcp.BasicDataSource,它实现了javax.sql.DataSource,而java.sql.Wrapper又实现了BasicDataSource,但是BasicDataSource没有实现Wrapper(jdk 1.6.x)中定义的方法.但是我的项目有一个扩展 BasicDataSource 的类 (MyClass) 编译没有任何问题 - 我在这里有点困惑。在 IntelliJ 中,我将 MyClass 视为错误。

【问题讨论】:

    标签: java apache-commons-dbcp


    【解决方案1】:

    该类已使用javax.sql.DataSource 接口的早期版本(Java 5 或更早版本)编译。 Wrapper 接口是在 Java 6 / JDBC 4.0 中引入的。

    当类加载器加载一个实现了接口的类,但没有实现所有新方法时,它允许这样做。当实际调用该方法时,会抛出一个NoSuchMethodError(我相信它会存根丢失的方法以抛出此异常)。这允许 - 有限的 - 前向兼容性:只要该方法未被实际调用,实现就会起作用。

    这也意味着,当您对此类进行子类化时,只要该类的源不是您项目的一部分,它就会表现得好像所有方法都已实现(即使它们没有实现)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2014-11-20
      • 2011-08-04
      • 2012-12-04
      • 2012-09-01
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多