问问题
567 次
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 回答