java - 为什么为每个类创建接口(interface)而不是其实现

标签 java interface

这似乎是标准,所以到目前为止我一直在遵循它,但现在我正在从头开始构建一个新类,而不是修改旧类,并且觉得我应该理解为什么我应该遵循项目约定。

几乎每个类都有一个名为classnameable的接口(interface)。在代码中,database.class 永远不会出现一次,但在我想要使用该类的地方,我会看到 databaseable.class

据我了解,接口(interface)是一个从未实现但继承以保持标准的类。那么为什么这些接口(interface)被当作真正的类来使用呢?

最佳答案

To my understanding an interface was a class that was never implemented but was inhereted from to keep standards. So why are the interfaces being used as if they were real classes.

这有点困惑。接口(interface)定义了 API,以便来自不同作者、模块或项目的代码片段可以交互。例如,java.util.Collections.sort() 可以对实现 List 接口(interface)并包含实现 Comparable 接口(interface)的对象的任何对象进行排序 -即使在编写排序代码时实现类可能还不存在!

现在,您的项目中的情况似乎反射(reflect)了一种不幸且相当常见的反模式:所有东西都有一个接口(interface),大部分都具有单个实现类,甚至对于内部类也是如此。

测试驱动开发(TDD)的支持者曾经大力提倡这一点,他们认为能够独立测试每个类,并将其所有依赖项替换为模拟对象,这一点至关重要。旧的模拟框架只能模拟接口(interface),因此为了能够单独测试每个类,所有类间依赖关系都必须通过接口(interface)。

幸运的是,较新的模拟框架可以模拟具体的类,并且不需要您用不必要的接口(interface)污染您的项目。有些人可能仍然会认为无论如何都应该“减少耦合”,但在我看来,他们只是在合理化他们不改变做法的愿望。

当然,如果您不采用原教旨主义 TDD,那么就没有充分的理由为所有事物提供接口(interface) - 但为某些事物提供接口(interface)却是非常充分的理由。

关于java - 为什么为每个类创建接口(interface)而不是其实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7009960/

相关文章:

java - C# 是否允许对接口(interface)类执行与 Java 8 现在相同的操作

java - 请推荐关于逆向工程混淆代码的好博客、文章或文档

vb.net - 在分部类中实现接口(interface)

java - 运算符(operator)困惑? !在声明的开头

java - 如何通过仅调用一个类来使用相同的方法调用四个或四个以上不同的类?

c# - 更改为通用接口(interface)对性能的影响

c++ - 如何传递带有虚方法的类以及如何将其用作成员变量?

java - 如果标记接口(interface)没有任何方法,它是如何工作的?

java - 预期为 : class java. lang.Integer,得到类 org.hibernate.action.internal.DelayedPostInsertIdentifier

Java JComboBox数组只显示一个元素