1

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

例如,这应该是正确的:

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

这会违反命名约定吗:

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

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

4

6 回答 6

4

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

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

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

请注意约定如何故意将通过 getter 和 setter 访问的值称为“属性”,以将它们与字段区分开来。这背后的意图是涵盖计算和存储的属性。

这可以回答您的问题:将“get”前缀用于计算属性的 getter 是完全合适的。

于 2013-10-21T20:44:48.150 回答
1

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

于 2013-10-21T20:43:15.633 回答
1

区分类的“属性”和类的“字段”可能很方便。粗略地说,属性是你拥有 getter 和 setter 的东西。所以如果你有方法public Color getColor()and public void setColor(Color color),那么你可以说“颜色”是一个属性。

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

所以,回到你的问题,如果你班级的用户认为有一个名为“count plus one”的属性是有意义的,那么一定要有一个;并随心所欲地实施它。

于 2013-10-21T20:54:06.193 回答
1

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

唯一的问题是名称应尽可能清楚地表明该方法的作用。因此,在您的情况下getCountPlusOne,这是一个该死的好方法名称,因为它正是这样做的,即返回count + 1

关于 java 中命名方法的约定如下:

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

因此,正如您所见,与 OOP 范式和 Java 方法约定本身没有任何关系。

有关更多信息,请阅读此处此处

于 2013-10-21T20:40:23.990 回答
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. 可能会很有趣...

于 2013-10-21T22:38:25.170 回答
0

它不会违反任何命名约定,但您将无法使用像 JavaBeans 这样的可重用组件,而且从事相同项目的人也以通常分配的方式假设 getter,因此您不想改变传统顺其自然是可能的。

于 2013-10-21T20:55:31.707 回答