适当的getter命名约定

时间:2013-10-21 20:38:29

标签: java naming-conventions

使用OOP范例命名方法时,只有在返回成员变量时才为方法添加前缀“get”吗?或者,如果将“get”添加到名称中,即使它返回从成员变量计算的值,而不是它自己的成员变量,它是否适合OOP?

例如,这应该是正确的:

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

这会违反命名惯例吗?

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

对不起,我是一个完美主义者。

6 个答案:

答案 0 :(得分:4)

  

在名称中添加“get”是否适合OOP,即使它返回一个从成员变量计算的值,而不是它自己的成员变量?

Java中getter和setter的命名不受任何“OOP原则”的约束 - 它纯粹是JavaBeans convention

  

必须使用getsetis(用于boolean属性而不是get)以及其他方法(因此, - 根据标准命名约定,称为访问器方法和增变器方法。这允许在框架内轻松自动检查和更新bean状态,其中许多包括用于各种类型属性的自定义编辑器。 Setter可以有一个或多个参数。

请注意约定如何故意调用通过getter和setter“properties”访问的值,以区别于字段。这背后的意图是涵盖计算和存储的属性。

这导致您的问题的答案:对计算属性的getter使用“get”前缀是完全合适的。

答案 1 :(得分:1)

简单的回答。不,它不会违反我所知道的任何命名惯例。

唯一的事情是名称应该尽可能清楚地表明方法的作用。所以在你的情况下,getCountPlusOne是一个非常好的方法名称,因为它确实如此,即返回count + 1

关于java中命名方法的遵循惯例是 如下:

  

方法应该是lowerCamelCase中的动词;也就是说   第一个字母小写和后续单词的第一个字母   大写。

因此,正如您所看到的那样,与OOP范例和java方法约定无关。

如需了解更多信息,请阅读herethere

答案 2 :(得分:1)

实际上,提供访问器方法的一个原因是它们需要与成员变量对应。因此,只要get之后的名称是描述性的,那么它就是一个有效的名称。

答案 3 :(得分:1)

区分类的“属性”和类的“字段”可能很方便。粗略地说,属性是你有吸气剂和制定者的东西。因此,如果您有方法public Color getColor()public void setColor(Color color),那么您可以说“颜色”是属性。

在许多情况下,类的字段与其属性相同。但他们并非必须如此。例如,具有名为“color”属性的类可能包含字段int redComponent; int greenComponent;int blueComponent;。 “颜色”属性的getter和setter用户不应该关心它是如何在内部存储的。

所以,回到你的问题,如果你的班级用户有一个名为“count plus one”的属性是有意义的,那么无论如何都要有一个;并按照你喜欢的方式实施它。

答案 4 :(得分:0)

它不会违反任何命名约定,但您将无法使用像JavaBeans这样的可重用组件,并且在同一项目中工作的人也会以典型的方式假设获取者,因此他们总是被分配,因此您不希望改变传统只要有可能顺其自然。

答案 5 :(得分:0)

我的2美分,

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


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

但就个人而言,我更喜欢像

这样的东西
public int getCountIncremented( int increment ) {
    int new_increment = increment;

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

    return this.getCount() + new_increment;
}

我没有搜索java中是否有参数的默认值。这可能很有趣......