2012-12-22 34 views
-2

我一直在尋找到一個項目白衣5000+類,那麼我認爲這在每個等級:爪哇 - 全局變量VS全局方法

private static int foo = 1; 

private static void setfoo(int value) 
{ 
    foo = value; 
} 

private static int getfoo() 
{ 
    return foo; 
} 

所以,我想爲什麼不使用全局變量,如果設置反正是靜態的。

全局方法和變量之間存在資源使用差異嗎?

謝謝你。

+0

嗯...我想'public'和'static'變量(或者是'public'和'static'的getter)儘可能接近Java中的全局變量。此外,全局變量通常是你想要避免的。 – 2012-12-22 16:57:38

+1

在java中,沒有像「全局方法」或「全局變量」那樣的東西。一個類可以有靜態方法或字段。這就是你剛剛發佈的內容。 –

+1

如果這些靜態變量是私有的並且它們的訪問器也是這樣,那麼通過getter和setter訪問它們沒有多大意義。它只是增加了噪音,恕我直言。無論如何,靜態可變變量都是一種氣味。 –

回答

2

getter和setter是有用的,如果你e.g希望在將來添加驗證(或添加記錄,或做訪問統計或......)

+0

那麼,兩者是相同的東西?只是不同,如果我想添加一個記錄器或功能的東西? –

0

如果的getter/setter存在,總是使用它們。getFoosetFoo有效地定義了名爲「Foo」的屬性,它在概念上與變量foo不同。 foo只是保存該屬性當前值的變量,可以視爲屬於屬性。

請記住,雖然屬性不必只是獲取/設置其支持變量。它也可以在設置之前驗證您傳入的值。它可以同步對變量的訪問。並且/或者將來,setter可能會改變其他事物的特性,並且getter可以返回另一個事物的當前狀態,甚至不需要備份變量。通過直接設置變量,您可以在屬性被/將被更改爲將來執行任何操作的情況下創建兼容性問題。

但是,如果你知道setFoo做(和,在不久的將來,仍然會做),不外乎設置一個名爲foo變量,然後它會實際上是更好的有一個getter /二傳手。他們不是更清潔,更可讀的,他們當然不是更有效率; a = 3; doStuffWith(a);擊敗setA(3); doStuffWith(getA());。他們的缺席讓你擺脫了只需要變量的財產的概念包袱。只有在需要的時候才添加吸氣/吸氣器(或者肯定會很快需要)屬性可以提供的特殊行爲。 但是一旦你添加了它們,到處都可以使用它們。

+0

我同意訪問者是公開的,但他們是私人的。因此,代碼中的更改只會影響類本身。 –

+0

@JBNizet:不會更改代碼不再與*本身兼容的情況,並且您必須先更改一百個不同的'foo = 1;'s到'setFoo(1);'s在'Foo'背後實施一些特殊的行爲。 :P吸氣和吸氣已經在那裏;他們應該被使用。 – cHao

+0

那麼,你是否建議我們不應該直接從定義它的類內部訪問任何私有變量,而是始終使用getter/setter?我更喜歡現在擁有乾淨可讀的代碼,並且只在需要時重構它,而不是現在混淆我的代碼,以防將來發生某些事情。 –

0

字段和getter和setter都是私有的和靜態的。這意味着它們的預期目的是僅在類中使用。所以如果你在一些所有類別可訪問的地方創建它(全局訪問),那麼另一個公共類也必須跟蹤每個類中的字段,它在被使用之前必須被初始化爲一些值(在你的情況下它的1我感覺)。此外,你將不得不使這個代碼相互排斥,以保持它始終正確(如果調用5000次,真的會使它變慢)..把你的電話..它的一切都取決於你..