簡體   English   中英

在jar中實現接口但不覆蓋方法的類

[英]Class that implements an interface in a jar, but does not override the methods

我的項目對apache commons-dbcp有依賴性,我們正在使用1.2.2版

我們正在使用的commons-dbcp版本具有org.apache.commons.dbcp.BasicDataSource類,該類實現javax.sql.DataSource ,該類又實現了java.sql.Wrapper ,但是BasicDataSource不實現Wrapper定義的方法(jdk 1.6 。X)。 但是我的項目有一個擴展了BasicDataSource的類( MyClass ),編譯時沒有任何問題-我有點困惑。 在IntelliJ中,我將MyClass視為錯誤。

該類已使用javax.sql.DataSource接口的早期版本(Java 5或更早版本)進行編譯。 Wrapper接口是Java 6 / JDBC 4.0引入的。

當類加載器加載實現接口但未實現所有新方法的類時,它會允許它。 當實際調用該方法時,會引發NoSuchMethodError (我相信它會對丟失的方法進行存根處理以引發此異常)。 這允許-有限-前向兼容性:只要實際上不調用該方法,該實現就可以工作。

這也意味着,當您對該類進行子類化時,只要該類的源不屬於您的項目,它的行為就好像所有方法都已實現(即使尚未實現)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM