Java中的Accessor和Mutator

时间:2015-06-23 03:15:33

标签: java getter-setter

例如,在主要方法中我有setFirstName()并调用联系类来执行此操作。 在联系课程中,我知道我应该使用:public String getName() 然后public void setFirstName(String name)

我知道这是正确的方法。 但相反,我发现如果我这样做:

public String setFirstName(String name)
{
    return this.name=name;
}

这也可行,我不需要使用getName()方法。

任何人都可以帮我解释为什么会这样?我的访问者/ mutator方法是否正确?

3 个答案:

答案 0 :(得分:1)

吸气剂和制定者只是一种惯例。编译器不会特别识别它们,或类似的东西。

getter,例如public String getFirstName() {return this.name;},只是一个返回字段值的方法。

一个定位器,例如public void setFirstName(String name) {this.name=name;},只是一个将字段值设置为其参数的方法。

没有什么可以强迫你创建getter和setter,如果你不这样做,或者如果你决定以不同的方式实现它们,就不会发生任何不好的事情。他们通常以特定方式编写的原因是它在大多数时候都能正常工作。但你没必要。

您创建了一个方法:

  • name字段的值设置为其参数。
  • 返回name字段的值。

没错,这是一种非常有效的方法 作为制定者有用吗?当然,它设定了价值 作为吸气剂有用吗?不 - 告诉我,你怎么用它来获得这个人的名字? 但这是一种非常有效的方法,它不是“正确”或“错误”,它只是不是特别有用。

答案 1 :(得分:1)

访问者的想法是它只能读取但不会修改。这是一个有用的约定,因为如果一直做到这一点,就可以推断出一些你不了解的代码。通常情况下,您不应该期待名为getX()的奇怪副作用。做一些懒惰的初始化可能没问题,但是如果这样的"懒惰的getter"被命名为getOrCreateX()或类似名称,以便向用户提供第一次使用可能需要更长时间/涉及一些昂贵操作的提示。

返回内容的mutator可能很有用,但是如果你以一种提示它返回的方式命名它,它会帮助你的类的用户。它是错误代码还是以前的值?人们不希望从名为setX()的东西中获得返回值,因此他们会惊讶地看到这样的签名,并且必须查看班级的文档才能看到它的作用。

摘要:始终将代码视为其他人必须随时接管您的代码 - 不要做一些令人惊讶的事情。即使您从未将代码交给其他任何人,您未来的自我也会感谢您选择解释该方法的名称。

注意:你的setter实现不是很有用,因为它总是返回你刚刚传入的新值。

答案 2 :(得分:0)

必须正确实施setter和getter,因为某些框架依赖于它们才能正常运行。

诸如Mockito,DI框架和一些xml序列化技术之类的模拟框架依赖于set和get方法。