2013-10-21 38 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的参数。这可能很有趣...