我的理解是,为了维护源代码兼容性,Java从未将新方法引入公共接口,因为这破坏了实现接口的现有客户端。 Java发行说明说明
通常,该政策如下,但以下列出的不兼容之处除外: 维护版本(例如1.4.1、1.4.2)未引入任何新的语言功能或API。他们将保持彼此之间的源兼容性。 功能版本和主要版本(例如1.3.0、1.4.0、5.0)保持向上但不向下的源兼容性。
通常,该政策如下,但以下列出的不兼容之处除外:
维护版本(例如1.4.1、1.4.2)未引入任何新的语言功能或API。他们将保持彼此之间的源兼容性。
功能版本和主要版本(例如1.3.0、1.4.0、5.0)保持向上但不向下的源兼容性。
然而,包java.sql和javax.sql继续发展,并介绍了许多不兼容的改变。例如,我注意到以下不兼容的更改(在Java 6中引入):
java.sql
javax.sql
java.sql.Statement
java.sql.Wrapper
java.sql.PreparedStatement
java.sql.ResultSet
您知道添加这些方法的方式和原因吗?是否java.sql正在从平台的其余部分区别对待?您是否知道围绕这些补充的讨论/ JSR?
我从Sun开发人员处收到以下答复
对于JDK 7等功能版本,JDK中API的一般演变策略是
(有关更多种类的兼容性的更多信息,请参阅
“种类的兼容性:源,二进制和行为” 和 “兼容发展的BigDecimal”
向接口添加方法是二进制 兼容的, 但与 源 不兼容,因此通常不这样做。通常,接口实现越广泛,我们向其添加方法的可能性就越小。JDBC区域是此策略的例外,并且使用较宽松的升级规则,但是当人们想要升级到新的JDK版本时,确实会引起实际问题。