gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:30 24 4
gpt4 key购买 nike

我的项目依赖于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com