我明白了java 8接口中提供的默认方法可以减少应该在实现中编写的代码。天气晴朗。但我不明白这一点,为什么将这个特性添加到语言中可以保护我们免受向后不兼容的影响?如果,比方说,我们已经将新方法添加到接口,那么我们可以简单地在需要的( , 等)事件中List实现它,而没有默认方法实现?ArrayListLinkedList确切的不兼容性隐藏在哪里?没有默认方法可以破坏什么?这里的问题是关于破坏源兼容性,但我的问题有点另一个 - 关于保存它。
1 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
如果,假设我们已经将新方法添加到接口 List,那么我们可以简单地在需要的地方(ArrayList、LinkedList 等)事件实现它,而无需默认方法实现?
当您不控制 的所有实现时,您如何做到这一点List?你(指 Java 大神)可以将它添加到 JDK 中,但是其他人代码中的所有实现如何?那些将不再编译。如果有人试图在他们的实现中调用其中一种新方法(从以前编译的 JAR 文件中),他们会MethodNotFoundError在运行时遇到麻烦。
向后兼容性意味着现有代码无需修改即可工作。在这种情况下,它们的目标是源代码兼容性,这意味着您可以编译相同的源代码,而无需针对新的 Java 版本进行更改。另一件事是二进制兼容性,这意味着旧的编译类继续工作(Java 是著名的)。
源代码兼容性不时被破坏(例如 JDBC API 因总是获得新的接口方法而臭名昭著),但在这样的中心类中却没有List(JDBC 更改仅影响数据库驱动程序供应商,而不影响应用程序代码) .
因此,如果没有默认方法,就无法将新方法添加到List接口中。它需要是一个额外的EnhancedList或ListV8(所有 JDK 列表都已经实现,但所有使用的代码都需要重构才能使用)。
添加回答
举报
0/150
提交
取消
