java - 与内部实现的接口(interface)——好还是坏

标签 java interface coding-style

<分区>

我正在开发一个包含许多 someInterface - someInterfaceImpl 对的项目。几天前,我想到了(可能是受到阅读一些 objective-c 代码的启发)将默认实现作为内部类包含在内。 现在一些同事(都比我有更多的 Java 经验)看到了这个想法 - 反馈介于震惊和惊讶之间(“这可行吗?”)。

我在谷歌上搜索了一下,但没有找到太多证据证明这种“模式”有用(我个人喜欢): pdf-papera faq about code style

您怎么看 - 特别是在“默认”实现与接口(interface)紧密耦合的情况下。

更新 我刚发现这个:Java Interface-Implementation Pair

(查看接受的答案)

最佳答案

接口(interface)的全部意义在于将用户与实现(默认或非默认)分开。您可以通过将实现作为内部类来解决这个问题。您实际上并没有保存任何代码行,并且使 API 变得困惑。您最终不得不做一些事情来对接口(interface)的用户隐藏内部类,例如将其设为私有(private)或默认范围,最好避免这样做。此外,如果您的默认实现需要更改但您已将接口(interface)发布为 API 的一部分,该怎么办。这是一个坏主意,因为它没有太多好处,而且是一种反模式。

最后,如果您真的有一个默认实现,那么也许它应该是一个基类(而不是一个接口(interface)),而其他实现扩展该类并覆盖行为。

我认为这篇文章对类似问题进行了有趣的讨论: Question

关于java - 与内部实现的接口(interface)——好还是坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10884330/

相关文章:

c++ - 如何在 Qt 中设置子菜单项的样式?

c++ - 我应该为永远恒定的值创建一个全局常量变量,例如足球运动员的数量吗?

java - 如何在 H2 中设置 sysdate? (供测试用)

java - 通过套接字连接发送数据库数据

c++ - 无法获取派生类成员的值

Angular 2 可注入(inject)接口(interface)?

c++ - Vim:将连续的行与空格对齐

java - Android - 无法调整 AlertDialog 的大小

Java 8/Fernflower 反编译器 : Bug or Feature

java - 在 UML 中,如果接口(interface)与类有关系,这种关系是否也适用于实现它的任何类?