java - 在 jar 中实现接口(interface)但不重写方法的类

标签 java apache-commons-dbcp

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

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

最佳答案

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

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

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

关于java - 在 jar 中实现接口(interface)但不重写方法的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26063867/

相关文章:

java - LDAP "simple"用户身份验证(JNDI - Tomcat)不稳定?

java - 无法转换项目... Intellij IDE 中的文件过早结束错误

java - Spring上的DBCP和Hibernate不会重新打开死连接,为什么?

java - Oracle 通用连接池 (UCP) 有多好

Java 连接到 Sql server 时出现 jtds 错误

java - 我正在研究以下 Spring Boot 示例,并且收到 ApplicationContextException

java - 编写一个程序,提示用户输入两点(包括工作)

java - DBCP 池出现错误 : "java.sql.SQLException: Configuration file not found"

tomcat - Apache Commons DBCP 奇怪的行为

显示中间结果的java正则表达式