Java中的getter必须根据命名约定返回字段值吗?

时间:2018-04-10 08:50:22

标签: java

getXXX用作XXX的获取者。例如

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字段,我们希望根据命名约定返回此字段值?

3 个答案:

答案 0 :(得分:3)

当我编写一个返回某个东西并且不是一个愚蠢的getter的方法时,我经常会在get作为前缀之前进行思考,以避免让类客户感觉该方法是一个愚蠢的getter。 例如,假设它进行相对昂贵的计算,诸如getFoo()之类的名称可能会产生误导。

通常,如果我找到比get更好的前缀,我会使用它。例如,有时候find()compute()会更有意义 但由于其他前缀不匹配,我不会试图太聪明,我保留get 另外,为了更清楚,你应该使用javadoc来指定合同和方法的意图(如果它很重要)并且可以使API对于类的客户更友好。

答案 1 :(得分:2)

1)一般的Java命名约定不包含getter: http://www.oracle.com/technetwork/java/codeconventions-135099.html

2)getter是javabeans命名约定的一部分,您可以在其中定义getXxx / isXxx方法以获取属性xxx的值。同时,您不必将此getter与成员变量保持同步 - 成员变量是私有的(包私有)并且是预期的。如果必须,你甚至可以删除成员变量 - 当存在访问器方法时,bean属性存在。

也就是说,知道你在做什么,你可以在getter和setter中使用任何计算。

3)尽管你可以使用计算,但保持快速吸气是一种很好的做法。没有人希望你的吸气者能够计算一小时的东西。

如果你必须先计算一些大的东西,那就做一些缓存,不要每次都运行计算。在特殊的init()/ prepare()方法中进行计算也是个好主意。

将javadoc评论添加到您的getter中也是个好主意。

4)如果将成员变量暴露给类用户,则会出现问题。例如,如果在JAXB中将属性绑定到成员变量,则可能会错过具有特殊功能的getter。

对于这种情况,没有getter的POJO可能比具有自定义行为的复杂类更容易处理。但仔细设置访问器绑定没有任何问题,它只需要更多的按钮和一些额外的思考。

答案 2 :(得分:0)

如果您一直想对返回的值执行某些操作,那么您可以使用Domain A (with SSL in frontend) Page 1 News (folder) News A News B Domain B (with SSL in frontend) Page 2 Page 3 ,否则,请使用单独的名称,因为您可能希望在该行的某处读取原始值。