Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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/4/oop/2.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 使用set方法访问实例字段修饰符的必要性_Java_Oop_Field - Fatal编程技术网

Java 使用set方法访问实例字段修饰符的必要性

Java 使用set方法访问实例字段修饰符的必要性,java,oop,field,Java,Oop,Field,我正在学习java。现在,在oop中,将类中的字段设置为私有并根据需要提供get和set方法来访问或修改变量一直是一种实践。现在我的问题是,如果您有一个声明为私有的字段的set方法,那么用户仍然可以更改该字段的值,即使它是不可见的。所以,为什么不公开该字段而不是提供一个集合方法呢?尝试阅读有关封装的内容,您将更好地理解其原因。尝试阅读有关封装的内容,您将更好地理解其原因。您是正确的-设置者和获取者可以更改相应属性的值。那么,我们为什么需要它们呢 我将在这里列举一些原因 维护代码更容易。您可以很

我正在学习java。现在,在oop中,将类中的字段设置为私有并根据需要提供get和set方法来访问或修改变量一直是一种实践。现在我的问题是,如果您有一个声明为私有的字段的set方法,那么用户仍然可以更改该字段的值,即使它是不可见的。所以,为什么不公开该字段而不是提供一个集合方法呢?

尝试阅读有关封装的内容,您将更好地理解其原因。

尝试阅读有关封装的内容,您将更好地理解其原因。

您是正确的-设置者和获取者可以更改相应属性的值。那么,我们为什么需要它们呢

我将在这里列举一些原因

  • 维护代码更容易。您可以很容易地找到谁更改了属性。只需查找所有Setter调用。否则,您可以搜索所有引用属性的位置,并找到99%的位置是您读取属性的,1%的位置是您写入属性的
  • 它更容易调试。您可以将断点放在getter或setter中,具体取决于您要查找的内容
  • setter和getter都是方法,这一事实在字节码工程和现代复杂框架中的代理创建中得到了应用

您是正确的-设置者和获取者可以更改相应属性的值。那么,我们为什么需要它们呢

我将在这里列举一些原因

  • 维护代码更容易。您可以很容易地找到谁更改了属性。只需查找所有Setter调用。否则,您可以搜索所有引用属性的位置,并找到99%的位置是您读取属性的,1%的位置是您写入属性的
  • 它更容易调试。您可以将断点放在getter或setter中,具体取决于您要查找的内容
  • setter和getter都是方法,这一事实在字节码工程和现代复杂框架中的代理创建中得到了应用
在oop中,将类中的字段设置为私有并根据需要提供get和set方法来访问或修改变量始终是一种实践

变量最好保持私有(尽管可以保持公共)。并非所有变量都需要get和set(accessors和mutators)函数。这取决于用例。例如,如果我持有某种类型的计数,这是类内部的,我不会为它提供set(..)方法。如果您的get(…)和set(…)方法只不过是返回和分配,我建议您遵循公司的编码指南。如果你有选择权,那就选择getter和setter

现在我的问题是,如果您有一个声明为私有的字段的set方法,那么用户仍然可以更改该字段的值,即使它是不可见的。那么,为什么不公开该字段而不是提供一个集合方法呢

这里有一个非常简单的例子:

void setVar(string x){
    myPrivateVar = x;

    //log the change..
    writeToLog("myPrivateVar was updated to: " + x + " at <blah blah>");

    //inform others of the change.
    updateDependantConfiguration();
}
void setVar(字符串x){
myPrivateVar=x;
//记录更改。。
WriteLog(“myPrivateVar更新为:“+x+”at”);
//将更改通知其他人。
UpdateDependentConfiguration();
}

在oop中,将类中的字段设置为私有并根据需要提供get和set方法来访问或修改变量始终是一种实践

变量最好保持私有(尽管可以保持公共)。并非所有变量都需要get和set(accessors和mutators)函数。这取决于用例。例如,如果我持有某种类型的计数,这是类内部的,我不会为它提供set(..)方法。如果您的get(…)和set(…)方法只不过是返回和分配,我建议您遵循公司的编码指南。如果你有选择权,那就选择getter和setter

现在我的问题是,如果您有一个声明为私有的字段的set方法,那么用户仍然可以更改该字段的值,即使它是不可见的。那么,为什么不公开该字段而不是提供一个集合方法呢

这里有一个非常简单的例子:

void setVar(string x){
    myPrivateVar = x;

    //log the change..
    writeToLog("myPrivateVar was updated to: " + x + " at <blah blah>");

    //inform others of the change.
    updateDependantConfiguration();
}
void setVar(字符串x){
myPrivateVar=x;
//记录更改。。
WriteLog(“myPrivateVar更新为:“+x+”at”);
//将更改通知其他人。
UpdateDependentConfiguration();
}