2013-10-21 37 views
1

使用OOP範例命名方法時,只有當它返回一個成員變量時才用「get」前綴該方法嗎?或者,如果將「get」添加到名稱中,是否適合OOP,即使它返回的是從成員變量計算出的值,但不是它自己的成員變量?getter的適當命名約定

例如,這被認爲是正確的:

private int count = 0;  
public int getCount() { 
    return count; 
} 

這會違反命名約定:

public int getCountPlusOne() { 
    return count + 1; 
} 

對不起,我是一個完美主義者。

+0

該名稱應該清楚地表明它的作用。如果它被稱爲'getCount'但不返回'count',那就很讓人困惑。 – SLaks

+0

那會很好。 – GriffeyDog

+0

這種方法的唯一問題是,如果您希望將其與第三方庫一起使用,該庫需要爲您的類指定Java Bean命名約定 –

回答

4

如果在名稱中加入「get」即使返回從成員變量中計算出來的值,但它不是自己的成員變量,它是否適合OOP?在Java中的getter和setter的

命名不受任何「OOP原則」支配 - 這純粹是一個JavaBeans convention

類的屬性必須用getsetis(用於boolean可以訪問屬性而不是get),以及其他方法(所謂的訪問器方法和增變器方法)按照標準的命名約定。這允許在框架內輕鬆自動檢查和更新bean狀態,其中許多包括各種類型屬性的自定義編輯器。安裝者可以有一個或多個參數。

請注意公約如何故意調用通過getters和setters「properties」訪問的值,以區分它們與字段。這背後的意圖是覆蓋計算和存儲的屬性。

這導致您的問題的答案:使用計算屬性的getter的「get」前綴是完全合適的。

1

簡單的答案。不,它不會違反我所知道的任何命名約定。

唯一的一點是該名稱應該儘可能清楚地指出該方法的用途。所以在你的情況下,getCountPlusOne是一個非常好的方法名稱,因爲它確實如此,即返回count + 1

公約遵循關於Java命名方法是 如下:

方法應該是動詞lowerCamelCase;也就是 的第一個字母小寫,後面的單詞首字母大寫 。

因此,正如你所看到的,與OOP範式和java方法約定沒有任何關係。

欲瞭解更多,請閱讀herethere

1

實際上,提供存取方法的一個原因是它們不需要對應於成員變量。所以只要get之後的名稱是描述性的,那麼它就是一個有效的名字。

1

區分類的「屬性」和類的「字段」可能很方便。粗略地說,屬性是你有吸氣和吸氣器的東西。所以如果你有方法public Color getColor()public void setColor(Color color),那麼你可以說「顏色」是一個屬性。

在許多情況下,類的字段與其屬性相同。但他們不一定是。例如,具有名爲「color」屬性的類可能具有字段int redComponent; int greenComponent;int blueComponent;。 「顏色」屬性的獲取者和設置者的用戶不應該關心它是如何存儲在內部的。所以,回到你的問題,如果你的班級的用戶有一個名爲「count plus one」的屬性是有意義的,那麼通過一切手段都有一個;並實現它,但是你喜歡。

0

它不會違反任何命名約定,但您將無法使用,如JavaBean可重用的組件,也讓人對同一項目的工作也呈典型的方式干將,他們總是被分配,所以你不想改變傳統只要有可能隨流而行。

0

我的2美分,

private int count = 0;  
public int getCount() { 
    return count; 
} 


public int getCountPlusOne() { 
    return this.getCount() + 1; 
} 

但personnaly,我寧願像

public int getCountIncremented(int increment) { 
    int new_increment = increment; 

    if(increment == NULL) { 
     new_increment = 1; 
    } 

    return this.getCount() + new_increment; 
} 

我沒有搜索,如果你能有默認值在java的參數。這可能很有趣...