我一直在讨论“访问者”这个词的用法。 (上下文是Java编程)。我倾向于将访问者视为隐含的“属性访问者”。 - 也就是说,该术语意味着它或多或少地提供对对象内部状态的直接访问。另一方坚持认为任何以任何方式触及对象状态的方法都是访问者。

我知道你们不能为我赢得这个论点,但我很想知道如何定义这个词。 :)

有帮助吗?

解决方案

通过访问者,我倾向于考虑getter和setter。

通过坚持所有触及对象内部状态的方法都是访问器,似乎任何实际使用对象状态的实例方法都是一个访问器,而这似乎并不正确。什么样的实例方法不会使用对象的状态?换句话说,一个不以某种方式使用对象状态的实例方法不应该是一个开头的实例方法 - 它应该是一个类方法

例如, BigDecimal.add 方法被视为访问者?这是一个方法,它将读取调用 add 方法的实例的值,然后在添加另一个 BigInteger 的值后返回结果。似乎相当直接的是 add 实例方法不是getter也不是setter。

其他提示

一个访问器方法完全按照它在tin上所说的那样:从没有副作用的类型访问某些状态(除了懒惰的实例化,也许,这不是调用者通常知道的事情)。

private int _age;

public int getAge()
{
    return _age;
}

修改状态的方法(在我看来)更有用地被视为mutators。

除了谷歌搜索和维基百科之外, Java语言规范将此作为示例访问方法:

private static int N;
public static int getN() { return N; }

所以,是的,我会说它只是得到一个字段的价值。编译器可能会将其内联,将其转换为简单的读取,因此除此之外的任何内容都可能不是访问器。

访问者方法  :getRed,getGreen和getBlue

这些方法通常会访问一个值。

Mutator方法 : setRed,setGreen,setBlue

mutator会改变一个值

我一直都是第一个定义。所以,通常这只适用于getter和setter。如果我们采用第二种方法,那么它就没有那么有用了,因为它涵盖了几乎所有的方法。

访问器方法用于访问对象的字段。所以getter和setter都是访问器方法。 观察者方法是一种方法的正确术语,可以对对象进行更一般的观察,而不会造成外部可观察到的副作用。主要目的是引起副作用的方法是 mutator方法。因此,setter是mutator方法的示例。对于良好的工程实践,应避免使用公共设置器,因为它们使类无法对其数据强制执行不变量:它们违反了类通常应执行的抽象障碍。

能够在技术对话中区分吸气剂和制定者是件好事。 Accessor 方法是 modifier 方法的合作伙伴。 Accessor s读取对象的状态( getA()),而 modifier s写入状态( setA(Object))。

为对象内部提供访问权限(可以是“读取访问权限”“写入访问权限”)的方法是“访问者方法”。

这里的作者肯定以这种方式使用它:

  1. http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html

  2. http://c2.com/cgi/wiki?AccessorsAreEvil

  3. 我认为这个术语可能来自Common Lisp(并非一切?) - 用setf来修改访问者插槽的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top