代码之家  ›  专栏  ›  技术社区  ›  notnoop

Java 6后台兼容性和SQL

  •  9
  • notnoop  · 技术社区  · 15 年前

    我的理解是,为了维护源兼容性,Java从未引入新的公共接口方法,因为它打破了实现接口的现有客户端。 Java Release notes 状态

    一般来说,政策如下: 除了任何不相容之处 下面进一步列出:

    • 维护发布(如1.4.1, 1.4.2)不要引入任何新的语言特性或API。他们将 保持源代码与 彼此。

    • 功能发布和主要 发布(如1.3.0、1.4.0、5.0) 保持向上而不是向下 源兼容性。

    然而,这些包裹 java.sql javax.sql 继续发展并引入许多不兼容的变化。例如,我注意到以下不兼容的变化(在Java 6中介绍):

    你知道这些方法是如何和为什么被添加的吗?是 Java.SQL 与平台的其他部分区别对待?您知道关于这些添加的讨论/JSR吗?

    4 回复  |  直到 12 年前
        1
  •  9
  •   sanjeevonline    12 年前

    我得到了Sun开发人员的以下回复

    对于JDK 7这样的功能版本,JDK中API的一般演进策略是

    1. 不要破坏二进制兼容性(如JLSV3第13章中的定义)
    2. 避免引入源不兼容
    3. 管理行为兼容性更改

    (更多信息,比您想阅读的关于不同类型兼容性的更多信息,请参见

    "Kinds of Compatibility: Source, Binary, and Behavioral" "Compatibly Evolving BigDecimal"

    向接口添加方法是二进制的 兼容的 但是 来源 不兼容,所以通常不这样做。一般来说,一个接口实现得越广泛,我们向它添加方法的可能性就越小。JDBC区域是这个策略的一个例外,它使用更宽松的升级规则,但是当人们想要升级到新的JDK版本时,这确实会导致真正的问题。

        2
  •  4
  •   Jörn Horstmann    15 年前

    注意,添加新方法只会破坏源代码的兼容性,已经编译了 Statement ResultSet 在JDBC中,驱动程序将继续在较新的JDK上运行。只有当您尝试调用一个新方法时,您才会 NoSuchMethodError .

        3
  •  1
  •   John Calsbeek    15 年前

    他们可能假设实现这些方法的数据库驱动程序供应商保持最新的Java运行时,并且最好引入有用的新方法并暂时打破兼容性。

    当然,他们本可以设计得更好,这样就不需要破坏兼容性了。

        4
  •  1
  •   sk.    15 年前

    Sun从不保证版本之间的源代码兼容性,只保证二进制兼容性。最常见的例子是,包含“assert”或“enum”标识符的源代码不会在JDK 1.4(对于assert)或1.5+(对于enum)下编译,但现有的.class文件仍将在这些较新的jvm下运行。

    您可以尝试使用-源标志来在较新的JVM下编译旧的.java文件,但是如果依赖于已更改的JVM类,则仍然可能遇到问题。