3

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

POST /calculation
<data>abc</data>

这个计算可以通过不同的逻辑“计算器”来实现,具体取决于服务器配置。

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

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

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

4

4 回答 4

7

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

于 2009-11-12T19:03:58.237 回答
1

为什么你认为方法应该是静态的?他们当然可以,但这会限制你以后插入不同的实现。如果您担心内存消耗等问题,正如您在问题的最后一段中已经说过的那样,使用单例对您来说与静态相同。

于 2009-11-12T18:53:57.570 回答
1

在我看来,您想要一个接口,其中的方法声明为正常,以及一个实现类,然后简单地实例化它的一个实例。方法本身没有理由是静态的。

于 2009-11-12T18:58:22.410 回答
0

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

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

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

静态方法:

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

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

您的问题的其他解决方案是Singleton按照接受的答案中的建议使用。

于 2016-02-18T04:26:15.067 回答