Tag: 向前兼容性

JDK是“向上”还是“向后”兼容?

后向二进制兼容性(或向下兼容性) – 使用旧版本库API构build的客户端在新版本( wiki )上运行的能力。 向上二进制兼容性(或向前兼容性) – 使用新版本库API构build的客户端能够在旧版本( wiki )上运行。 从1.4.2 (以及Java SE 6与J2SE 5.0的兼容性)开始,Sun的关于JDK 5.0中的 JDK 不兼容性的一般文档描述了JDK的兼容性,如下所示: 除了下面列出的不兼容性以外,JDK 5.0与Java 2 SDK v1.4.2是二进制兼容的。 这意味着,除了指出的不兼容性, 使用1.4.2编译器构build的类文件将在JDK 5.0中正确运行 。 我认为文献作者在这句话中混合了 “向上”和“向后”相容的术语。 他们描述了一个“向后”的兼容性,但称这个function为“向上”的兼容性。 这是一个错字,错误还是打算在这里? JDK是“向上”还是“向后”兼容?

Java 8默认方法是否打破源代码兼容性?

一般情况下,Java源代码已经向前兼容。 据我所知,在Java 8之前,编译后的类和源代码都与后来的JDK / JVM版本兼容。 [更新:这是不正确的,见下面的评论重新'枚举'等]。但是,随着在Java 8中添加默认方法,这似乎不再是这种情况。 例如,我一直使用的库有java.util.List的实现,它包含一个List<V> sort() 。 此方法返回已sorting列表内容的副本。 这个部署为jar文件依赖项的库在使用JDK 1.8构build的项目中运行良好。 然而,后来我有机会使用JDK 1.8重新编译库本身,我发现库不再编译:带有自己的sort()方法的List实现类现在与Java 8 java.util.List.sort()默认方法。 Java 8 sort()默认方法对列表进行sorting(返回void ); 我的库的sort()方法 – 因为它返回一个新的sorting列表 – 具有不兼容的签名。 所以我的基本问题是: 由于默认方法,JDK 1.8是否为Java源代码引入了前向不兼容? 也: 这是第一次这样的前锋不兼容的变化吗? 当devise和实施的默认方法是否被考虑或讨论过? 它logging在任何地方吗? 这个(确实很小)的不便是折扣而不是好处? 以下是一些在1.7下编译和运行的代码,运行于1.8以下 – 但不能在1.8下编译: import java.util.*; public final class Sort8 { public static void main(String[] args) { SortableList<String> l = new SortableList<String>(Arrays.asList(args)); […]