java 中的接口和静态方法

Interfaces and static methods in java

我想到接口无法实例化,因此我可以创建一个只包含一堆我需要的静态实用程序方法的接口,而不是带有私有构造函数和 [=14 的常规 class =] 静态方法。对此有何评论?我应该这样做还是真的无关紧要?

虽然这是可能的,但应该使用接口

when it is important for disparate groups of programmers to agree to a "contract" that spells out how their software interacts. Each group should be able to write their code without any knowledge of how the other group's code is written. Generally speaking, interfaces are such contracts.

https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

接口应定义为抽象类型,用于指定class的行为;因此它们将在以后实施。

您尝试做的事情并非完全错误(接口可以提供静态方法),但这绝对不是它们的设计目的。如果你想从一个共同的“地方”提供一组静态实用程序,你可以用私有构造函数声明一个最终的 class ,以防止它的扩展(可能的方法覆盖),并避免它的实例化。 Math class 就是一个很好的例子。

或者,如果你想声明所述 class 的实例,你可以正常声明你的 class,然后将它的方法声明为静态的(以防止它们被覆盖)并提供一个 public构造函数或工厂方法。

程序不仅仅是计算机要遵守的一组指令。这也是给未来开发者的一个信息。您应该使用程序中的语句向其他开发人员(甚至几个月后的您自己)表明您打算让计算机做什么。

这就是为什么我们给变量、方法和 classes 明确的名称。这就是为什么我们以某些预期的方式布置我们的程序。这就是为什么我们始终使用缩进,以及为什么我们有命名约定。

其中一个约定是,如果您有一堆需要组织在一起的静态方法,则应将它们组织成一个 class,而不是一个接口。将所有方法放入接口在技术上是否可行并不是您应该问的问题。重要的是如何最有效地传达您的实际意图。

为此,请不要以奇怪、创新的方式设置您的程序。你只会让人们感到困惑和烦恼。