我们有一个给定的REST接口:
POST /calculation
<data>abc</data>
此计算可以由不同的逻辑“计算器”实现,具体取决于服务器配置。
我们现在正在设计每个计算器必须实现的Java接口。该接口将为每个REST服务提供一种方法。
鉴于所有REST(和HTTP)调用都是无状态的,每个方法都应该是静态的。但是,您无法在Java接口中定义静态方法。这种情况有一个很好的解决方法吗?
我们可以将方法定义为非静态,然后首先创建计算器类的实例。通过在接口中使用static关键字来指示方法是无状态的,这似乎更清晰。
答案 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
,如接受的答案所示。