2009-11-12 30 views
2

我們有一個給定的REST接口:Java界面靜態方法解決方法?

POST /calculation 
<data>abc</data> 

這種計算可以根據服務器配置不同的邏輯「計算器」來實現。

我們現在正在設計每個計算器必須實現的Java接口。該接口將爲每個REST服務提供一種方法。

鑑於所有REST(和HTTP)調用都是無狀態的,每個方法都應該是靜態的。但是,您無法在Java界面中定義靜態方法。對於這種情況有沒有很好的解決方法?

我們可以將方法定義爲非靜態方法,然後首先創建計算器類的實例。通過在界面中使用static關鍵字來指示方法是無狀態的,這似乎更清晰。

回答

1

在我看來,你想要一個接口,聲明爲正常的方法和一個實現類,然後簡單地實例化一個這樣的實例。沒有理由本身爲方法本身是靜態的。

1

爲什麼你認爲方法應該是是靜態的?他們當然可以,但是這會限制你在稍後插入不同的實現。如果你擔心內存消耗或類似情況,使用Singleton將會像靜態一樣爲你執行相同的操作,正如你在問題的最後一段所述。

7

無狀態並不意味着靜態。無狀態意味着組件不依賴於狀態。我說組件,因爲你的接口的整個實現實際上是無狀態的 - 它不會有任何成員變量。所以實現類的多個實例完全可以。特別是如果你有一個上下文來管理它們 - 例如Spring或者EJB。

0

如果沒有實現此接口的類不需要更改實現,請在接口中使用static method作爲helper方法。

您將不需要任何解決方法java 8版本。

Java 8支持界面中的靜態方法。看看這個文檔page

靜態方法:

除了默認的方法,你可以在接口定義靜態方法。 (靜態方法是一種與其定義的類關聯的方法,而不是任何對象,類的每個實例都共享其靜態方法)。

這使您更容易組織幫助程序你的庫中的方法;你可以在同一個interface,而不是你的問題separate class

其他的解決方案是使用Singleton爲接受的答案建議保持static methods特定於interface