Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “的定义是什么?”;存取器方法“;?_Java_Definition_Accessor - Fatal编程技术网

Java “的定义是什么?”;存取器方法“;?

Java “的定义是什么?”;存取器方法“;?,java,definition,accessor,Java,Definition,Accessor,我一直在争论“accessor”(上下文是Java编程)一词的用法。我倾向于将访问器视为隐式的“属性访问器”——也就是说,这个术语意味着它或多或少地提供了对对象内部状态的直接访问。另一方坚持认为,任何以任何方式接触对象状态的方法都是访问器 我知道你们不能为我赢得这场辩论,但我很想知道你们如何定义这个术语 我一直遵循第一种定义。所以,一般来说,这只适用于getter和setter。如果我们使用第二种方法,那么这是一个不太有用的区别,因为它涵盖了几乎所有的方法。访问器方法完全按照它在tin上所说的做

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


我知道你们不能为我赢得这场辩论,但我很想知道你们如何定义这个术语

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

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


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

对于访问器,我倾向于考虑getter和setter

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


例如,该方法是否应被视为访问器?该方法将读取调用
add
方法的实例的值,然后在添加另一个
biginger
的值后返回结果。很明显,
add
实例方法既不是getter,也不是setter。

除了Google和wikipedia之外,还将此作为访问器方法的一个示例:

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

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

在技术对话中能够区分getter和setter是很好的
Accessor
方法是
modifier
方法的合作伙伴
Accessor
s读取对象的状态(
getA()
),而
modifier
s写入状态(
setA(对象)

访问器方法:获取红色、绿色和蓝色

这些方法通常访问一个值

突变方法:设置红色、设置绿色、设置蓝色


mutator将对值进行变异

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

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

这里的作者肯定是这样使用它的:


  • 我认为这个术语可能起源于Common Lisp(不是所有的吗?)——使用setf修改访问器插槽的值。

    这正是我争论这个问题的原因。:)我同意这一点。变体改变状态,访问器检查状态。我想说,术语访问器也适用于对象的派生属性。毕竟,即使是派生属性也反映了对象的状态。这不是一个结论。仅仅因为规范给出了这个例子并不意味着访问器方法也不是其他东西。我知道——当时也是——访问器和变异器之间的区别。当这是当前的一个问题时,争论的另一方提到了一位芬兰大学讲师的一本Java书。该书将访问器定义为以任何方式接触对象状态的任何方法。我认为这是对这个词的误译或误解,并试图在这里证实我的观点我会更谨慎地表达这一点:一个变体修改实例的状态。或者更为谨慎:一个变异子修改了一个实例的可观察状态。(->抽象数据类型)
    private static int N;
    public static int getN() { return N; }