2012-03-12 63 views
5

我正在寫一個遊戲,我有一個輸入類,其中包含所有不同鍵的布爾值。我在主遊戲類中創建了這個類的一個實例。布爾人是公開的,還是應該使用訪問者訪問它們?在非靜態類中使用公共變量很糟糕嗎?

+4

總是使用私有變量與setter/getters,除非你真的必須 – 2012-03-12 16:18:43

+2

@JimmyGustafsson:爲什麼?如果getters/setter真的沒有別的辦法,只能獲取/設置值,爲什麼不讓它們公開? – 2012-03-12 16:20:16

+0

布爾值是什麼表示_about_鍵? – paislee 2012-03-12 16:20:20

回答

4

而不是每個鍵boolean的,它會更容易閱讀和編寫,如果你有一個private Map<String, Boolean> keyStates,所有按鍵被初始化爲false。那麼你的訪問者可能是:

public void setPressed(String keyName) { 
    keyStates.put(keyName, true); 
} 

public void setReleased(String keyName) { 
    keyStates.put(keyName, false); 
} 

public boolean isPressed(String keyName) { 
    return keyStates.get(keyName); 
} 

具有存取方法,而不是公共變量一般的原因是,它允許類來更改它的實現,而不需要在與會員的互動類的變化。例如,通過上述操作,您現在可以添加代碼來計數或記錄按鍵,或者更改所用的基礎類型Map,而不會將這些內容暴露給外部。

這是不是個人偏好。 EncapsulationInterfaces是面向對象軟件工程的組成部分,並且是從技術POV中實現互聯網的主要設計原因。

+0

謝謝!這看起來像一個非常好的方法。 – user1150769 2012-03-12 16:36:55

0

標準做法是使用遵循java bean約定的getter/setter來使成員變量保護或私有。這往往有些冗長,但有一個非常好的庫(www.projectlombok.org),它爲你生成了getters/setters/constructors/toString/hashCode/equals方法。

2

一般來說,我會建議使用getter和setter,因爲它更乾淨,更有組織,更具可讀性。如果你有很多不同的程序員在查看你的代碼,這也會有所幫助。我的觀點是總是讓你的變量是私人的,除非你需要公開他們的具體原因。如果性能在你的遊戲中確實是一個問題,那麼通過減少函數調用來公開你的變量會有所幫助。

0

將類變量聲明爲私有並使用公共getter和setter方法訪問它們總是一種很好的java編程習慣,除非它真的需要將它們聲明爲public。

如果您使用的是IDE,那麼只需單擊一下即可爲類變量/成員變量生成getter和setter。

3

這主要是個人品味的事情 - 我相信你會發現人們爭論雙方,我會說這不是黑人或白人,而是取決於班級的「大」。

使用getter和setter的基本原理是,您可以將實際的表示形式抽象爲一個字段,以便您可以自由地開始將其呈現爲例如。派生的值,而不會更改您的界面。所以真正歸結爲這個類的接口對你有多寶貴。

如果它是您的一流公共接口的一部分,那麼一定要使用getters和setter。另一個極端,如果它是一個簡單的數據持有者,就像一個單獨使用一個類的元組一樣(例如在轉換到另一個類之前映射數據庫行),那麼我會毫不猶豫地使用字段;接口沒有實際價值,因爲它只在內部使用。

那麼有多少類/包會使用這個類?如果這是一個私人的「本地」課程,那麼我認爲僅僅使用這些字段並沒有任何問題,並且如果需要更改,請更新您的調用者。

訪問字段更容易證明,如果他們也是final也是如此,這種情況通常就是這種情況。

0

現在你已被反覆告知使用getter和setter,並且因爲你使用的是Java(IDE可以幫助你簡單地使getter/setter成爲getter/setter,並且每個人都清楚地使用它們),請閱讀本主題以獲得幫助添加一些平衡,你對他們的用法:

Getters and Setters are bad OO design?

相關問題