Java:编写以“开始”开头的方法是一种不好的做法吗;获得;当它们不是';t getters?
我只是好奇,因为我习惯于objC,在那里我们使用点符号来调用getter,所以当一个方法以get开头时,它不一定与实例变量有任何关系Java:编写以“开始”开头的方法是一种不好的做法吗;获得;当它们不是';t getters?,java,oop,syntax,getter-setter,Java,Oop,Syntax,Getter Setter,我只是好奇,因为我习惯于objC,在那里我们使用点符号来调用getter,所以当一个方法以get开头时,它不一定与实例变量有任何关系 在java中,编写以“get”开头的方法会是一种糟糕的做法吗当它们不是getter时?这实际上取决于你如何使用它,除非它会使代码混淆或误导你的方法,不管你想怎么命名。对于比简单的getter更有用的方法,使用前缀get可能会误导,因为该方法可能会产生意想不到的后果打电话的人 更好的做法是将附加功能提取到一个新方法中,这个新方法的名称描述了它的意图。如果你这样做,它
在java中,编写以“get”开头的方法会是一种糟糕的做法吗当它们不是getter时?这实际上取决于你如何使用它,除非它会使代码混淆或误导你的方法,不管你想怎么命名。对于比简单的
getter
更有用的方法,使用前缀get
可能会误导,因为该方法可能会产生意想不到的后果打电话的人
更好的做法是将附加功能提取到一个新方法中,这个新方法的名称描述了它的意图。如果你这样做,它不会结束世界,但是从5年后将要查看你的代码的人那里考虑一下。就我个人而言,我不会使用get来表示实际上不是getter的方法。如果需要,可以使用fetch。但这只是个人喜好 看看这个博客
尽管根据JavaBeans约定,getter的名称必须以
get
开头,但并非所有以get
开头的名称都必须表示“哑”getter,即由简单变量支持的名称。如果一个方法得到了一些东西,甚至是一个与您的对象关联的计算过的东西,给它一个以get
开头的名称是完全合适的
下面是一个不表示变量支持属性的“get”方法示例:
public class Person {
private Date dob;
// DOB is a "classic" property
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
// Although ageInYears is a calculated property,
// a name that starts in "get" is appropriate for it.
int getAgeInYears() {
Calendar now = Calendar.getInstance(Locale.US);
now.setTime(new Date());
Calendar old = Calendar.getInstance(Locale.US);
old.setTime(dob);
int diff = now.get(YEAR) - old.get(YEAR);
if (old.get(MONTH) > now.get(MONTH) ||
(old.get(MONTH) == now.get(MONTH) && old.get(DATE) > now.get(DATE))) {
diff--;
}
return diff;
}
}
我想,答案是肯定的。大多数Java程序员习惯于将getter作为 返回私有字段值的方法 由于“get”对于方法名来说是非常通用的,所以更倾向于使用更精确的方法名,它可以告诉您有关意图(“为什么”)或算法(“如何”)的信息。 sortNames(…)或applyQuicksort(…)比getPhoneBook()好得多。 此外,findNumberForName(…)比getNumber(…)好得多。 “Find”表示它的复杂度为O(log(n))或O(n),但不像getter通常那样为O(1) 有时候你需要或者你想让这个名字非常笼统。
我总是用“提供”而不是“获取”来避免混淆。你有什么理由想这样做吗?不要用
get
来表示非getter,除非你必须使用“创建”或“获取”,如果它不是真正的getter