getXXX
用作XXX
的getter。例如
class Foo {
private String XXX;
public String getXXX() {
return XXX;
}
}
所以,它很清楚,毫无疑问。现在让我们考虑以下情况:
class Foo {
public String getXXX() {
String XXX;
//some calculations, resolvings etc
return XXX;
}
}
在这种情况下,我可以根据命名约定将我的方法命名为getXXX
吗?或者换句话说,getXXX
是否假设类中有XXX
字段,并且我们希望根据命名约定返回此字段值?
当我编写一个返回某些东西并且不是一个愚蠢的获取器的方法时,我经常在前缀之前通过get
来避免给类客户端带来该方法是一个愚蠢的获取者的感觉。 例如,假设它进行相对昂贵的计算,则诸如getFoo()
之类的名称可能会产生误导。
一般来说,如果我找到一个比get
更好的前缀,我会使用它。 例如,有时find()
或compute()
可能更有意义。
但是由于其他前缀不匹配,我不会试图太聪明,我会保持get
.
此外,为了更清楚,您应该使用 javadoc 来指定方法的约定和意图,如果它很重要,并且可以使 API 对类的客户端更友好。
1) Getters 不在一般 Java 命名约定的涵盖范围内: http://www.oracle.com/technetwork/java/codeconventions-135099.html
2) Getters 是 javabeans 命名约定的一部分,您可以在其中定义 getXxx/isXxx 方法来获取属性 xxx 的值。同时,您不必使此getter与成员变量保持同步 - 成员变量是私有的(包私有),这是有意的。如果有必要,您甚至可以摆脱成员变量 - 当有访问器方法时存在 bean 属性。
也就是说,知道你在做什么,你可以在 getter 和 setter 中使用任何计算。
3)即使你可以使用计算,保持快速的getter也是一个很好的做法。没有人期望你的getter计算几个小时的东西。
如果您第一次必须计算一些大的东西,请进行一些缓存,不要每次都运行计算。在特殊的 init()/prepare() 方法中进行计算也是一个好主意。
此外,将javadoc注释添加到您的getter也是个好主意。
4) 如果将成员变量暴露给类用户,则会出现此问题。例如,如果在 JAXB 中将属性绑定到成员变量,那么可能会错过具有特殊功能的 getter。
对于这种情况,没有 getter 的 POJO 可能比具有自定义行为的复杂类更容易处理。但是仔细设置访问器绑定并没有错,它只需要多几个按钮和一点额外的思考。
如果您一直想对返回值执行一些操作,则可以使用getXXX
,否则,请选择一个单独的名称,因为您可能希望沿线的某处读取原始值。