2014-11-25 62 views
1

哪種做法更好,風格明智? 使用關鍵字「this」或爲構造函數的參數選擇不同的參數名稱?哪種練習比較好?關於建設者

情形1:

public class Student { 
    //variables 
    private String name; 

    //constructor 
    public Student(String name) { 
    this.name = name; 
    } 
} 

或情況2:

public class Student { 
    //variables 
    private String name; 

    //constructor 
    public Student(String aName) { 
    name = aName; 
    } 
} 
+1

取決於風格和自我喜好。這不會影響性能。我發現案例1)更具可讀性。 – 2014-11-25 12:25:26

+0

'private.String name;' - 那怎麼辦? – August 2014-11-25 12:25:37

+0

哪個更成立? – n17n 2014-11-25 12:25:46

回答

1

這兩者之間沒有真正的區別。

當我開始上大學的時候,我學會了用this做到這一點,但是當我去了一所不同的學校時,他們教會我以不同的名字在田間做第二種方式。爲了使它更難,他們甚至教會我不要完全這樣做,並在構造函數中使用setter。

我更喜歡第一種方式結合二傳手(這樣你就可以檢查不同的東西,或者確保值存儲在正確的方式,即一個名字總是以大寫字母開頭)

我會做它的方式是以下內容:

public class Student { 
    //variables 
    private String name; 

    //constructor 
    public Student(String name) { 
    setName(name); 
    } 

    //setter 
    public void setName(String name){ 
    this.name = name; 
    } 
} 

但是你應該選擇和使用你最喜歡的方式,因爲你是一個製作它的人。

+0

如果您仍然使用setter,但是您不應僅爲此目的編寫setter方法。 – ATG 2014-11-25 12:46:00

+2

該解決方案需要額外的護理。考慮閱讀關於從構造函數中調用非最終方法的文章。一個這樣的例子:http://www.informit.com/articles/article.aspx?p=20521 – 2014-11-25 12:50:04

+0

@ATG即使你想以某種方式存儲某些東西?假設你有一個屬性「私人字符串名稱」,並且你希望它以大寫字母開頭,因爲名字應該以大寫字母開頭。除非在類的構造函數中設置名字,否則setter不會在atm anywehere中使用。但是當另一個程序員開始工作時總會有方法被使用的可能性。這樣您可以確定名稱的值始終以相同的格式存儲。 – 2014-11-25 12:51:20

2

有一個在兩種情況下沒有區別。這取決於你的偏好。你可以以任何方式做到這一點,只要你喜歡。

我用第一種方法去。但我沒有任何解釋選擇。因爲兩者沒有任何區別。

1

這樣做沒有「標準」方式。你會發現在代碼的可讀性方面,人們在不同的「思維流派」之間分裂。

我的建議是與您組織中最常用的或您認爲更具可讀性的內容一致。

例如,我喜歡爲參數使用不同的名稱,並使用「this」。因爲:

  • 如果您忘記使用「this」,則使用相同的名稱會導致輕微的頭部疼痛。
  • 使用「this」。顯而易見,這是一個成員字段,而不是局部變量,即使在顏色編碼的IDE之外。

再次,這是一個個人的決定,你應該做:)

+0

我認爲,標準的Java方式,因爲大多數初學者需要掌握'this'的含義,就是調用'this.attribute = attribute'。在Android上,Google提出了另一種編碼政策:私有屬性(成員)獲得'm'前綴。例如:'mAttribute = attribute'。但正如你所說,每家公司都定義了自己的編碼規則集。 – 2014-11-25 12:36:41

+0

我傾向於「this」關鍵字。似乎更自然。 – n17n 2014-11-25 12:40:02

1

有一個沒有關於好的和壞的問題。您可以從兩個方便的地方選擇任何方式。沒有區別。 但我更喜歡第一種情況,因爲沒有必要記住兩個不同的變量名稱。

0

我更喜歡第一個。它始終可以使用,而不用考慮諸如aName之類的新名稱。而且,這就是例如eclipse如何生成setter。