2010-02-03 32 views
4

這是一種設計問題,我確信有人會這樣做。但在你看來,在類中或構造函數中分配一個變量會更好嗎?例如(不考慮語法或語言的,這只是說明):在類本身或類的構造函數中分配變量會更好嗎?

public class Example 
{ 
    private final int TIME_STAMP = Now(); 
    private int num = 2; 
} 

OR

public class Example 
{ 
    private readonly int TIME_STAMP; 
    private int num; 

    public Example() 
    { 
     TIME_STAMP = Now(); 
     num = 2; 
    } 
} 

請忽略不同的語言和語法的組合......這是優選的,爲什麼?

+0

所有的建議似乎都是有效的......我假設沒有標準的做法? – froadie 2010-02-03 18:12:17

回答

2

內聯(第一個選項):

  • 更可讀
  • 你不必重複它在每個構造
  • 如果在你的語言這樣的事情,你可以使用初始化塊。它們看起來像構造函數,但不需要多次定義。在Java中,就像這樣:

    { 
        var1 = 5; 
        varTime = now(); 
    } 
    
+0

@Bozho - 只需將代碼放入類中(如我的問題中的第一個選項),初始化塊的好處是什麼? – froadie 2010-02-05 17:52:47

+0

取決於喜好,它可能被認爲更具可讀性。 – Bozho 2010-02-05 19:01:44

4

在趨向於:

  • 設置默認情況下,類本身不變
  • 而這依賴於別的東西值(如當前時間)在構造函數中。


即,我傾向於使用像這樣(合併的兩個例子)

public class Example 
{ 
    private readonly int TIME_STAMP; 
    private int num = 2; 

    public Example() 
    { 
     TIME_STAMP = Now(); 
    } 
} 

但我喜歡的語言是PHP,它不允許我設置類聲明本身的非常量值,所以我的方式可能有點偏頗。

+0

yes,'private readonly int TIME_STAMP = NOW();'如果可能的話,會更好 – Bozho 2010-02-03 18:14:02

+0

投票,因爲我喜歡常量/默認值和變量值之間的區別。一個合乎邏輯的,有用的區別,methinks。 – doppelfish 2010-02-03 19:51:25

+0

不是'readonly'關鍵字顯而易見的區別嗎? – Bozho 2010-02-03 20:53:40

1

這裏的主要想法是,你在構造函數中放入類的任何啓動或初始化代碼。與此相反,在邏輯上,你把任何清理代碼放在析構函數中。

1

從可測試性的角度來看,這兩種方法都存在問題。除了常量,你應該有一個構造函數來接受它們作爲參數,或者一個允許你設置後臺的屬性。
通常,我會創建一個「完整」構造函數,它可以讓您完全控制類,以及一個空/默認構造函數,它調用另一個指定默認參數的構造函數。這樣,一切都在一個地方,我不必去查看後臺領域來了解施工時發生了什麼。

+0

這就是我寫我的構造函數。唯一一次我實例化的東西是當我需要實例化來保證全局範圍時。 – 2010-02-03 18:51:34

0

這實際上取決於您使用的是哪種語言。例如,在PHP中,只能在類中立即定義常量。但是,如果您想要跨語言兼容性,那麼最好將值分配給構造函數中的所有類變量。

相關問題