使用OOP范例命名方法时,只有在返回成员变量时才为方法添加前缀“get”吗?或者,如果将“get”添加到名称中,即使它返回从成员变量计算的值,而不是它自己的成员变量,它是否适合OOP?
例如,这应该是正确的:
private int count = 0;
public int getCount() {
return count;
}
这会违反命名惯例吗?
public int getCountPlusOne() {
return count + 1;
}
对不起,我是一个完美主义者。
答案 0 :(得分:4)
在名称中添加“get”是否适合OOP,即使它返回一个从成员变量计算的值,而不是它自己的成员变量?
Java中getter和setter的命名不受任何“OOP原则”的约束 - 它纯粹是JavaBeans convention:
必须使用
get
,set
,is
(用于boolean
属性而不是get
)以及其他方法(因此, - 根据标准命名约定,称为访问器方法和增变器方法。这允许在框架内轻松自动检查和更新bean状态,其中许多包括用于各种类型属性的自定义编辑器。 Setter可以有一个或多个参数。
请注意约定如何故意调用通过getter和setter“properties”访问的值,以区别于字段。这背后的意图是涵盖计算和存储的属性。
这导致您的问题的答案:对计算属性的getter使用“get”前缀是完全合适的。
答案 1 :(得分:1)
简单的回答。不,它不会违反我所知道的任何命名惯例。
唯一的事情是名称应该尽可能清楚地表明方法的作用。所以在你的情况下,getCountPlusOne
是一个非常好的方法名称,因为它确实如此,即返回count + 1
。
关于java中命名方法的遵循惯例是 如下:
方法应该是lowerCamelCase中的动词;也就是说 第一个字母小写和后续单词的第一个字母 大写。
因此,正如您所看到的那样,与OOP范例和java方法约定无关。
答案 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
中是否有参数的默认值。这可能很有趣......