首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java 8中的接口隔离原理及默认方法

Java 8中的接口隔离原理及默认方法
EN

Stack Overflow用户
提问于 2017-09-23 08:25:19
回答 4查看 914关注 0票数 7

根据接口隔离原理

不应强迫客户端实现不需要的接口方法。

...and,因此我们应该定义接口以实现逻辑分离。

但是Java 8中引入的default方法提供了在Java接口中实现方法的灵活性。Java 8似乎提供了增强接口的可行性,使其具有一些与其核心逻辑无关的方法,但具有一些默认或空的实现。

这不违反ISP吗?

EN

回答 4

Stack Overflow用户

发布于 2017-10-03 09:07:21

问得好。当然,它违反了接口隔离原则,我个人不喜欢默认实现的概念,因为它破坏了接口设计的美,也破坏了一些精确的多态性。如果有人不知道ISP的概念,那么他们就会开始设计胖接口,最终会像包装在一个接口中的所有东西一样。在代码设计过程中,人们也不会考虑逻辑上的问题。

这将导致代码的气味,我相信那些不知道这些概念的人会开始编写糟糕的代码。我认为默认实现是一个不想要的特性,因为它会让人们编写出难闻的代码。

票数 4
EN

Stack Overflow用户

发布于 2020-06-03 14:42:37

如果您打算这样做,ISP将被违反。您可以隔离这些接口,以只完成单一的职责。特定责任的一组方法很可能会遵循80-20条规则。您可以为80%的部分中的40-50%的方法提供默认实现。这个40-50%的部分将是很少使用的部分,因此默认设置是可以的。如果接口完成单一的责任,它们很少会太大,而且大多数情况下都是在ISP中。

票数 1
EN

Stack Overflow用户

发布于 2021-07-23 13:10:31

不是的。

事实上,默认方法可以是提供额外有用功能的好方法,同时避免违反ISP。

这是我更长的答案here的摘录

标准库中有好的使用default方法的例子。其中之一是java.util.function.Function及其andThen(...)compose(...)方法。..。

这些默认方法并不违反ISP,因为实现Function的类不需要调用或覆盖它们。可能有很多用例--一些具体的函数实例从来没有调用过它们的andThen(...)方法,但这很好--您不会通过提供有用但非必要的功能来破坏ISP,只要您不对所有这些用例进行限制--用它来强制他们做一些事情。在函数的情况下,将这些方法作为抽象方法而不是默认方法提供将违反ISP,因为所有实现类都必须添加自己的实现,即使它们知道不太可能被调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46377594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档