Java接口静态方法解决方法?

我们有一个给定的REST接口:

POST /calculation abc 

该计算可以由不同的逻辑“计算器”实现,具体取决于服务器配置。

我们现在正在设计每个计算器必须实现的Java接口。 该接口将为每个REST服务提供一种方法。

鉴于所有REST(和HTTP)调用都是无状态的,每个方法都应该是静态的。 但是,您无法在Java接口中定义静态方法。 这种情况有一个很好的解决方法吗?

我们可以将方法定义为非静态,然后首先创建计算器类的实例。 通过在接口中使用static关键字来指示方法是无状态的,这似乎更清晰。

在我看来,你想要一个接口,声明为normal的方法和一个实现类,然后简单地实例化一个这样的实例。 这些方法本身没有理由是静态的。

无状态并不意味着静态。 无状态意味着组件不依赖于状态。 我说组件,因为你的接口的整个实现实际上是无状态的 – 它不会有任何成员变量。 因此,实现类的多个实例完全可以。 特别是如果你有一个上下文来管理它们 – 例如Spring或EJB。

为什么你认为这些方法应该是静态的? 他们肯定可以,但这会限制你以后插入不同的实现。 如果您担心内存消耗等问题,使用Singleton会对您做静态操作,就像您在问题的最后一段中所说的那样。

如果实现此接口的类都不需要更改实现,则在接口中使用static method作为helper方法。

您不需要使用java 8版本的任何解决方法。

Java 8支持接口中的静态方法。 看看这个文档页面 。

静态方法:

除了默认方法,您还可以在接口中定义静态方法。 (静态方法是一种与定义它的类相关联的方法,而不是与任何对象相关联。该类的每个实例都共享其静态方法。)

这使您可以更轻松地在库中组织辅助方法; 您可以在同一个interface中保留特定于interface static methods ,而不是在separate class

问题的其他解决方案是在接受的答案中建议使用Singleton