2016-03-18 55 views
0

那麼從所有我已經讀過的關於邪惡的靜態變量是怎樣的東西,我變成了一個靜態的fobic。 我很害怕將一個靜態變量放到一個大項目中,因爲我覺得我可能會後悔,儘管它會使代碼更容易。 我從來沒有理解它何時可以使用靜態,所以我儘量不使用它們。 我正在開發這個大型遊戲,而靜態entityManager會非常有幫助,相反我最終將entityManager實例傳遞給需要它的每個類,但有時很難通過它。而且這樣做很容易EntityManager.addEntity(Entity);Im a static fobic

我知道有這樣的話題:「什麼時候可以使用靜態?但似乎沒有簡單的方法來解釋這個在一個簡單的方法來理解。

有人可以用簡單英語的方式告訴我,何時可以使用靜態變量?

英語不是我的主要語言,所以請記住這一點。

+4

傳遞一個'entityManager'實例是要走的路,但您可以使用依賴注入等工具更容易。你做對了。 –

+0

我認爲你不應該使用靜態實體管理器,如果你自己創建它,因爲實體管理器不是線程安全的。如果你已經在一個容器管理的環境中,你將可以安全地使用它,因爲像Spring這樣的容器可以通過上下文感知代理管理實體管理器的線程安全性 – Bunti

回答

2

1)它是完全確定使用靜態實例用final關鍵字爲只讀常量

2)如果你想單服務,這是在不同的組件訪問它的更好的使用依賴注入框架,比如Spring DI,CDI或吉斯對它們進行管理

2

static是偉大的,無狀態的,純粹的方法,如String.format()

static常量是很大的,如:

public static final double PI = 3.14159; 

static非常適合私人領域,其邏輯定義只能是單個值,例如enum(以及用於訪問這些專用字段的公共方法)中的值列表。

雖然你通常只有一個應用程序中的EntityManager,有多個沒有任何錯誤。你可以有3或300萬。因爲沒有嚴格的一個實體管理器,它不應該是靜態的。傳遞它是處理它的正確方法。

+2

小副注:小心使用靜態方法單元測試環境。所以它不僅僅是「無國籍」。當你在單元測試中調用時,它也關於「運行良好」。 – GhostCat

1

當您使用靜態內容時,您將在代碼庫中引入緊密耦合。如果這種靜態的東西是私人的,而且是內部的,那不是什麼問題,也沒有什麼可怕的。但是,對於所有其他人而言,它使您無法提供替代實現,現在您無法進行適當的單元測試。

現在,如果看起來太多的工作讓你將所有的經理都傳遞給我,相信我會帶來很大的靈活性。另一方面,如果有太多的經理被傳遞,請重新考慮你的課程,也許將它們分成更小的部分。在理想的情況下,每個班級只應對一件事情負責。