我只是好奇,因为我习惯了 objC,我们使用点符号来调用 getter,所以当方法以 get 开头时,它不一定与实例变量有任何关系。
在java中,当它们不是getter时编写以“get”开头的方法会是不好的做法吗?
我只是好奇,因为我习惯了 objC,我们使用点符号来调用 getter,所以当方法以 get 开头时,它不一定与实例变量有任何关系。
在java中,当它们不是getter时编写以“get”开头的方法会是不好的做法吗?
get
对服务于比简单目的更大的方法使用前缀getter
可能会产生误导,因为该方法可能会产生调用者未预料到的意外后果。
将附加功能提取到名称描述其意图的新方法中将是一种更好的做法。
如果您这样做,它不会终结世界,但请从 5 年后将要查看您的代码的人那里考虑一下。就我个人而言,我不会将 get 用于实际上不是 getter 的方法。如果你愿意,你可以使用 fetch 。但只是个人喜好。
看看这个博客。
尽管get
根据 JavaBeans 约定,getter 的名称必须以 开头,但并非所有以 开头的名称都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(...) 好得多。“查找”表示它具有 O(log(n)) 或 O(n) 的复杂性,但不是 O(1),因为它通常用于 getter。
有时您需要或希望保持名称非常笼统。我总是使用“provide”而不是“get”来避免混淆。