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

时间:2009-11-12 18:51:43

标签: java rest interface static-methods

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

POST /calculation
<data>abc</data>

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

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

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

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果实现此接口的类都不需要更改实现,请在接口中使用My object structure is some what like ------------------------------------- Message{UserName,Text,Time,Date} sample data ----------- MessageList:[ new Message("FO","Thanks, Sir. Have a pleasant stay.","05:12","26-01-2016"]), new Message("Room6 (Gebi)","You have a nice tool here,"03:24", "26-01-2016"]), new Message("FO","Please contact us" "09:24","25-01-2016"), new Message("FO","Welcome to our Hotel" "03:24","25-01-2016") ] HTML used is: <div class="row spacer-top" data-bind="foreach: Message"> <div class="col-sm-12 row spacer-top"> <div class="col-sm-2"> <span class="fontStyle4" data-bind="text:SenderName"></span> </div> <div class="col-sm-6"> <span class="fontStyle4" data-bind="text:Text"></span> </div> <div class="col-sm-2"> <span class="fontStyle4" data-bind="text:Time"></span> </div> <div class="col-sm-2"> <asp:ImageButton data-bind="attr: { 'id': CommunicationId }" meta:resourcekey="imgbtnMessage1" CssClass="btn pull-right btn-default" /> </div> </div> </div> 作为static method方法。

helper版本不需要任何解决方法。

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

静态方法:

  

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

这使您可以更轻松地在库中组织辅助方法;您可以java 8在同一static methods而不是interface

中保持interface具体

您问题的其他解决方案是使用separate class,如接受的答案所示。