2013-06-26 100 views
3

它出現了我一直在考慮的設計問題,沒有找到有關它的令人信服的信息。將類實例變量作爲參數傳遞

假設我有一些實例變量進入我的類,現在想象我想爲我的類寫一些私有的功能,使用該值。這不是一個問題,寫類似的東西:

public class Example{ 

    private String attribute1; 

    public void setAttribute1(String att){ 
     this.attribute1 = att; 
    } 

    private void processAttribute(){ 
     //do something with attribute1 
    } 

    public void executeExample(){ 
     processAttribute(); 
    } 

} 

processAttribute()使用attribute1值內。但是,許多文檔說我們應該嘗試限制全局變量的使用。它會是一個更可重用和設計良好的方式來寫這樣的東西嗎?

public class Example{ 

    private String attribute1; 

    public void setAttribute1(String att){ 
     this.attribute1 = att; 
    } 

    private void processAttribute(String att){ 
     //do something with attribute1 
    } 

    public void executeExample(){ 
     processAttribute(this.attribute1); 
    } 

} 

彙集您的想法。

+0

這不是全局變量的情況,第一種樣式是正確的樣式。要成爲全球化的,你需要製作變量'public static'或類似的東西。 –

回答

2

許多對全球狀態的論點也適用於此:

  • 它很難推理程序正確性的,如果屬性是在除了其他地方使用processAttribute方法
  • 對使用​​全局狀態的代碼進行並行化很難:如果在處理屬性時進行修改,會發生什麼?
  • 更多:http://c2.com/cgi/wiki?GlobalVariablesAreBad

在另一方面,這是一個私有方法,你可以自由地實現它,只要你喜歡,只要你滿足該類合同。

+0

這就是我想要達到的點。那麼,您認爲我應該在這裏使用參數嗎? –

+0

我個人喜歡儘可能保持一切儘可能的本地化,但有時使用實例或靜態屬性更有意義。 – Joni

1

首先是屬性1不是全局屬性,它只是一個類變量。類變量將在所有類方法中可用,使用此操作,因此您不需要將它們作爲方法參數傳遞。

由於沒有必要在這裏傳遞方法參數,因此實現它似乎不合邏輯。順便說一句,這是我的個人意見,其他人可能有不同的想法。

+0

它是一個類變量?!!! – stinepike

+1

很顯然,他不需要通過它。問題是最好的設計是什麼。 – Goatcat

+0

它是類示例的一個屬性。如果它被聲明爲公共靜態,那麼你可能會認爲它是一個全局變量。 –

0

但是,許多文檔說我們應該嘗試限制全局變量的使用 變量。

我認爲你誤解了這個概念。通常,全局變量是聲明爲public static的變量,以便可以從應用程序的任何其他部分直接訪問它們。

因此,在你的兩個例子中,變量attribute1不是全局變量。它只是該類的成員變量。

因此,我沒有看到兩個不同的代碼之間有太大的區別。

如果設計是固定的,那麼我認爲最好使用第一個使它更具可讀性。如果將來還有其他機會發送其他變量作爲參數而不是成員變量,那麼您可以使用第二個實現。 (雖然我認爲這完全取決於編碼的個人選擇)

+0

我同意你這是一個編碼員的個人選擇,兩者之間沒有太大的區別。現在,設想一個更復雜的類,其中不同的線程可以同時運行。 –

+0

我沒有看到這兩個執行之間的任何性能差異 – stinepike

+0

這不是性能問題,它是維護和設計。 –

相關問題