代码之家  ›  专栏  ›  技术社区  ›  Rytmis

“访问器方法”的定义是什么?

  •  14
  • Rytmis  · 技术社区  · 15 年前

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

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

    8 回复  |  直到 15 年前
        1
  •  15
  •   coobird    15 年前

    通过访问器,我倾向于想到getter和setter。

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

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

        2
  •  8
  •   Drew Noakes    15 年前

    访问器方法完全按照它在tin上所说的那样做:从类型中访问某些状态而不产生副作用(可能除了延迟的实例化之外,这通常不是调用方所知道的)。

    private int _age;
    
    public int getAge()
    {
        return _age;
    }
    

    修改状态的方法(在我看来)更有用地被认为是变异子。

        3
  •  3
  •   John Ellinwood    15 年前

    除了谷歌和维基百科, Java Language Specification 将其作为访问器方法的示例显示:

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

    所以,是的,我认为它只是得到一个字段的值。编译器可以将其内联,并将其转换为简单的read,因此任何超过该值的内容都可能不是访问器。

        4
  •  3
  •   Abdulfatah Ahmad Irro Jr.    11 年前

    存取方法: 变红、变绿和变蓝

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

    变异器方法: 设置为红色、设置为绿色、设置为蓝色

    一个转换器会使一个值发生变化

        5
  •  1
  •   Don Branson marios    15 年前

    我一直遵循第一个定义。所以,通常这只适用于getter和setter。如果我们使用第二种方法,那么这是一个不太有用的区别,因为它几乎涵盖了所有方法。

        6
  •  1
  •   andru    10 年前

    访问器方法用于访问对象的字段。所以getter和setter都是访问器方法。 观测器法 是对一种方法的正确术语,这种方法可以对一个物体进行更一般的观察,而不会产生外部可观察到的副作用。其主要目的是引起副作用的方法是 变位法 . 因此,二传手是 例子 一种变异方法。对于良好的工程实践,应该避免使用公共设置器,因为它们使类不可能在其数据上强制执行不变量:它们违反了类通常应该强制执行的抽象屏障。

        7
  •  0
  •   akf    15 年前

    在技术对话中能够区分getter和setter是很好的。 Accessor 方法是合作伙伴 modifier 方法。 存取器 s读取对象的状态( getA() ) 修饰语 S写状态( setA(Object) )

        8
  •  0
  •   Happyblue    9 年前

    提供访问的方法(可以是“读取访问” 对象内部的“写访问”)是“访问器方法”。

    这里的作者当然是这样使用的:

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

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

    我认为这个词可能来源于常见的口齿不清(不是所有的吗?)--使用setf修改访问器插槽的值。