为了账号安全,请及时绑定邮箱和手机立即绑定

Java接口方法:每个类都应实现一个接口吗?

/ 猿问

Java接口方法:每个类都应实现一个接口吗?

慕斯709654 2019-12-02 13:52:42

我已经在大学的一些课程中使用Java编程,但是我有以下问题:


从方法上来说,每个类都应该实现一个接口吗?不这样做是不明智的做法?您能描述一下使用接口不是一个好主意的情况吗?


编辑:就个人而言,我喜欢将所有对象都使用接口的概念作为一种方法和习惯,即使这显然没有好处。Eclipse使用所有方法自动创建了一个类文件,因此无论如何都不会浪费时间。


查看完整描述

3 回答

?
跃然一笑

如果您不打算使用它,则无需创建接口。

通常,在以下情况下需要接口:

  • 您的程序将为您的组件提供几种实现。例如,默认实现是代码的一部分,而模拟实现是在JUnit测试中使用的。一些工具会自动创建模拟实现,例如EasyMock。

  • 您想通过诸如Spring或JBoss Micro-Container之类的框架对此类使用依赖注入。在这种情况下,最好使用一个接口指定一个类与其他类的依赖关系。


查看完整回答
反对 回复 2019-12-02
?
largeQ

每个类都提供一个非私有API,但确实实现了一个接口(即合同)。是否选择将接口表示为Java接口取决于实现是否为“变化的概念”。

如果您完全确定只有一种合理的实现,则不需要接口。否则,界面将允许您更改实现而无需更改客户端代码。

假设您以后对新的要求有完全的控制权,那么有些人会大喊“ YAGNI”。其他人会公平地担心,他们将需要更改不变的-已发布的API。

如果您不实现接口(并使用某种工厂进行对象创建),则某些类型的更改将迫使您违反开放式封闭原则。在某些情况下,这在商业上是可以接受的,在其他情况下则不是。

您能描述一下使用接口不是一个好主意的情况吗?

在某些语言中(例如C ++,C#,但不包括Java),如果您的类不包含虚拟方法,则可以提高性能。

在小型程序中,或者在没有发布API的应用程序中,维护单独的接口的成本可能很小。

如果由于将接口和实现分开而导致复杂性显着增加,则可能未将接口用作合同。接口降低了复杂性。从消费者的角度来看,组件成为满足合同条款的商品,而不是本身具有复杂实施细节的实体。


查看完整回答
反对 回复 2019-12-02
?
一只名叫tom的猫

无需为每个类创建接口。一些常见的原因包括模拟(不需要Mockito等现代模拟框架)和依赖项注入(例如Spring,现代实现中也不需要)。

如果需要,请创建一个接口,尤其是正式记录公共接口时。有一些漂亮的边缘情况(例如标记界面)。

出于其价值,在最近的项目中,我们对所有内容都使用了接口(都引用了DI和模拟作为原因),事实证明这完全是浪费,而且增加了很多复杂性-在添加接口时就很容易实际上在少数情况下需要模拟某些东西。最后,我确定某个周末有人会进入并删除所有无关的接口。

我确实注意到,刚开始使用Java的C程序员倾向于喜欢很多接口(“就像标头”)。Eclipse的当前版本通过允许控制单击导航来生成弹出式窗口来询问接口或实现来支持此功能。


查看完整回答
反对 回复 2019-12-02

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信