2013-01-24 20 views
4

在我寫了一個java類的get方法之後,在相同的類或變量本身中使用get方法會更好嗎?在同一類的其他方法中使用get方法的Java約定是什麼?

例如:

if(a.getWidth()>this.getWidth()) 

或:

if(a.getWidth()>this.width) 

我也很困惑,如果我應該使用this.anything這麼多。比較相同類型的對象時,看起來更容易閱讀。

+6

就個人而言,我認爲你應該使用任何吸氣即公共標誌着this或者受保護,因爲未來的開發人員有可能重寫方法並更改那裏的結果,而這些結果可能不再通過getter代表的私有字段來反映 – MadProgrammer

+0

@MadProgrammer我借用了你對我的回答的評論,如果這樣做不好,讓我知道,我會編輯。 – Roger

回答

2

1)從類內部看來,在使用字段和getter之間沒有區別,但是如果getter被子類覆蓋會怎樣?

class A { 
    String name; 
    String address; 

    String getName() { 
     return name; 
    } 

    String getAddress() { 
     return address; 
    } 

    String getDescription() { 
     return name + " " + address; 
    } 
} 

class B extends A { 
    String country; 
    @Override 
    String getAddress() { 
     return super.getAddress() + ", " + country; 
    } 
} 

B.getDescription()預計會返回一個擴展地址,但它不會。請將A.getDescription()被實現爲

 return getName() + " " + getAddress(); 

2)我個人不使用this的可讀性,因爲IDE用不同的顏色

+0

這麼多不同的意見,這是真棒,但即時通訊試圖瞭解每個角度,並得到它的權利。當我從子類型中調用第二個(不是getter)方法時,雖然該方法位於超類中,但它將使用新格式化的數據。但是,當我調用超類類型的方法時,它將使用以前的版本。 –

+0

看到我的更新與解釋,希望它有助於理解我的意思 –

3

使用同一類中的get方法還是使用變量 本身更好?

恕我直言,使用變量。訪問器方法主要用於其他對象的使用。

另外我很困惑,如果我應該使用this.anything這麼多。當比較相同類型的對象到其他的 時,它看起來更容易閱讀。

這不是你明確地使用this reference..it的主要用於可讀性,就像你說的總是需要。

0

除非您有一個參數與某個字段具有相同名稱的情況(例如在構造函數中),否則不需要使用它。

對於訪問屬性,從長遠來看使用公共獲取器可能是有益的,因爲您可能想要爲屬性添加某種形式的處理,並且如果您在任何地方使用獲取器,則只需進行更改一旦。

0

如果你的get方法以某種格式返回數據,你必須使用get方法,否則,變量本身可以使用。

只有當您的方法參數與您的成員變量相同時,才需要此參數,否則這不是強制性的。

例如:

private String str; 

public void setString(String str){ 
    this.str = str; // here this.str is necessary because this represents the memeber variable 
} 

public String getString(){ 
    return this.str; // here this is optional and you can simply omit it 
} 
0

您可以使用存取或變量本身,這些個人喜好的東西它的一個。

有些人喜歡使用變量本身,因爲你沒有調用函數的開銷。但是,如果你對變量的值有任何限制,有時只使用你的訪問器和增變器就會更清晰;特別是如果你打算繼承子類。但其中的一件事情可以採取任何方式。

我喜歡使用this關鍵字的方式是我總是用它作爲實例變量。我發現它使代碼更易於閱讀,因爲您可以直觀地確定使用實例變量的位置以及使用局部變量的位置。這又是一個個人偏好的事情。

最主要的是要確保你的代碼乾淨,可讀。此外,請確保您遵循組織正在使用的任何編碼標準,並確保一致。

+0

偉大的提示!這是一位新教練,所以我正在努力確保我盡一切努力,儘可能高效地脫穎而出。這個任務不需要子類,但是讓它更加開放,這對我來說肯定會讓它看起來不錯。我瞭解它的方式是從調用方法的開銷和易於適應未來使用的角度進行折衷。 –

3

我認爲使用getter方法更適合於可維護性。考慮Null Object pattern它的方式來實現是通過使這樣的:

public String getName(){ 
    if (this.name == null){ 
     this.name = ""; 
    } 
    return this.name; 
} 

這應該拯救你用變量操作之前檢查了很多空的。

public boolean isCorrect(){ 
    if(this.name != null && this.name.isEmpty()){ 
     //The null check up is boilerplate code 
     return false; 
    }else{ 
     return true; 
    } 
} 

我寧願寫:

public boolean isCorrect(){ 
    if(this.getName().isEmpty()){ 
     //The null check up is boilerplate code 
     return false; 
    }else{ 
     return true; 
    } 
} 

當然,如果你採用這種模式這要看。

還要考慮你有

double width; 
double height; 

public double getWidth(){ 
    return this.width; 
} 

但在某些時候你決定改變它的一類,但仍然有方法讓你的程序不分解。

Dimension dimension; 
public double getWidth(){ 
    return this.getDimension().getWidth(); 
} 
// etc... 

最後(通過MadProgrammer評論),當您使用繼承,方法可以重寫,以更好地代表預定目的。

+0

+1填寫評論;) – MadProgrammer

+0

謝謝你的效率提示!我仍然很新,雖然我可以編碼一堆,但這些東西對我來說是黃金。我只是進一步研究了這個方法,並且很可能會在不久的將來使用它。 –

相關問題