Java 8 在接口上引入了默认方法,以便为集合接口的实现提供向后兼容性,以避免遗留库上的 MethodNotFound 错误。
即具有 List 的 java 7 实现的库将不会实现 stream() 方法。如果 java 8 代码使用此库,则默认实现提供了一个回退。
我在实践中看到的是,许多开发人员过分热衷于使用此功能来模拟混合和多重继承,其风格类似于 scala 特征。
我担心的一个问题是,这种编程风格模糊了接口(即合约)与其实现之间的界限,因此引入了隐藏的紧密耦合并违反了控制反转,迫使我使用后门通过覆盖默认实现来测试代码我的单元测试,以抑制不应出现在单元测试级别的行为。
使用默认方法是一种反模式,还是只有我一个人怀疑这一点?