RESTJava接口静态方法解决方案?
我们有一个给定的REST接口:
POST /calculation
<data>abc</data>
此计算可以由不同的逻辑“计算器”实现,具体取决于服务器配置
我们现在正在设计每个计算器必须实现的Java接口。接口将为每个REST服务提供一个方法
假设所有REST(和HTTP)调用都是无状态的,那么每个方法都应该是静态的。但是,您不能在Java接口中定义静态方法。对于这种情况是否有一个好的解决方法
我们可以将这些方法定义为非静态的,然后首先创建calculator类的实例。通过在接口中使用static关键字来指示方法是无状态的,这似乎更清晰
# 1 楼答案
为什么你认为方法应该是静态的?当然可以,但这将限制您以后插入不同的实现。如果您担心内存消耗之类的问题,那么使用单例对您来说就像静态一样,正如您在问题的最后一段中所说的那样
# 2 楼答案
无状态并不意味着静态。无状态意味着组件不依赖于状态。我说组件,因为接口的整个实现实际上是无状态的——它没有任何成员变量。所以实现类的多个实例是完全可以的。特别是如果您有一个上下文来管理它们,例如Spring或EJB
# 3 楼答案
在我看来,您需要一个具有声明为普通方法的接口和一个实现类,然后简单地实例化该类的单个实例。方法本身没有理由是静态的
# 4 楼答案
如果实现此接口的所有类都不需要更改实现,请在接口中使用
static method
作为helper
方法对于
java 8
版本,您不需要任何变通方法Java8支持接口中的静态方法。请查看此文档page
静态方法:
这使您更容易在库中组织助手方法;您可以将
static methods
特定于interface
的interface
保留在相同的interface
中,而不是保留在separate class
中解决您问题的另一个方法是使用
Singleton
,正如公认答案中所建议的那样