2
4

2 回答 2

6

JDK 8 兼容性指南的目的似乎存在误解。

这不是关于编译器或环境应该如何表现的规范,它是关于 JDK 如何表现的文档以发现潜在的兼容性问题。这并不意味着另一个编译器必须表现出完全相同的行为。

之所以提到该特定行为,是因为javac将其行为从 JDK 7 更改为 JDK 8,这可能会导致兼容性问题。

正如这里所解释的,正式过程被描述为为方法调用搜索所有可能适用的成员方法,但它并不是说在可以保证程序的正确性时不允许使用捷径。

因此该错误报告已关闭,因为新行为在规范范围内,不一定是因为替代行为会违反它。

于 2017-07-11T10:06:21.850 回答
3

如果O不覆盖doit()怎么办?

ThenClient必须仍然可以调用doit(),因为它是I' 合同的一部分,但是O' 的类文件中缺少此信息。

您可能会问“为什么不在O类文件中包含默认方法定义?”。这将破坏首先引入默认方法的意图:使用 Java-8 之前的编译器编译的类在 Java 8 中仍然可以工作,并且接口新方法应该可用。

于 2017-07-11T09:18:49.103 回答