有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

RESTJava接口静态方法解决方案?

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

POST /calculation
<data>abc</data>

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

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

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

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


共 (4) 个答案

  1. # 1 楼答案

    为什么你认为方法应该是静态的?当然可以,但这将限制您以后插入不同的实现。如果您担心内存消耗之类的问题,那么使用单例对您来说就像静态一样,正如您在问题的最后一段中所说的那样

  2. # 2 楼答案

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

  3. # 3 楼答案

    在我看来,您需要一个具有声明为普通方法的接口和一个实现类,然后简单地实例化该类的单个实例。方法本身没有理由是静态的

  4. # 4 楼答案

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

    对于java 8版本,您不需要任何变通方法

    Java8支持接口中的静态方法。请查看此文档page

    静态方法:

    In addition to default methods, you can define static methods in interfaces. (A static method is a method that is associated with the class in which it is defined rather than with any object. Every instance of the class shares its static methods.)

    这使您更容易在库中组织助手方法;您可以将static methods特定于interfaceinterface保留在相同的interface中,而不是保留在separate class

    解决您问题的另一个方法是使用Singleton,正如公认答案中所建议的那样