我的理解是,为了维护源代码兼容性,Java从不向公共接口引入新方法,因为这会破坏实现接口的现有客户端。Java发行说明态
一般而言,该政策如下,但下文进一步列出的任何不相容之处除外:
然而,包java.sql和javax.sql继续发展,并引入了许多不兼容的更改。例如,我注意到以下不兼容的更改(在Java 6中引入):
java.sql.Statement扩展了java.sql.Wrapper,需要新的两个新方法。java.sql.Statement引入了3种新方法java.sql.PreparedStatement引入了19种新方法!java.sql.ResultSet介绍了48个新方法!你知道这些方法是怎么增加的吗?java.sql是否与平台的其他部分不同?你知道关于这些补充的讨论/JSR吗?
发布于 2009-08-11 16:37:51
请注意,添加新方法只会破坏源代码兼容性,在JDBC驱动程序中已经编译好的Statement或ResultSet实现将继续在较新的JDK上运行。只有当您尝试调用一个新方法时,才会得到一个NoSuchMethodError。
发布于 2009-08-11 16:31:26
他们可能认为,实现这些方法的数据库驱动程序供应商正在与新的Java运行时保持同步,最好引入有用的新方法并暂时破坏兼容性。
当然,他们可以把它设计得更好,这样…就不需要破坏兼容性了。
发布于 2009-08-11 16:59:43
Sun从不保证版本之间的源代码兼容性,只保证二进制兼容性。最常见的例子是,包含“断言”或“enum”标识符的源代码不会在JDK1.4(用于断言)或1.5+ (用于枚举)下编译,但现有的.class文件仍将在这些较新的JVM下运行。
您可以尝试使用-source标志在较新的jvm下编译较旧的.java文件,但如果依赖已更改的jvm类,则仍然会遇到问题。
https://stackoverflow.com/questions/1261497
复制相似问题