我正在学习java。现在,将类中的字段设为私有并根据访问或修改变量的要求提供 get 和 set 方法始终是 oop 中的一种做法。现在我的问题是,如果您有一个声明为私有的字段的 set 方法,即使该字段不可见,用户仍然可以更改该字段的值。那么,为什么不公开该字段而不是提供一个 set 方法呢?
问问题
105 次
3 回答
1
尝试阅读有关封装的内容,您会更好地理解原因。
于 2012-09-10T11:57:54.243 回答
1
你是对的 - setter 和 getter 可以改变适当属性的值。那么,我们为什么需要它们?
我将尝试在这里列举一些原因。
- 更容易维护代码。您可以轻松找到谁更改了属性。只需查找所有 settter 调用。否则,您可以搜索所有与财产相关的地方,并找到 99% 的地方是您阅读财产的地方,以及 1% 的地方是您写财产的地方。
- 更容易调试。您可以根据要查找的内容在 getter 或 setter 中放置断点。
- setter 和 getter 是方法的事实用于现代复杂框架中的字节码工程和代理创建。
于 2012-09-10T12:03:46.877 回答
1
将类中的字段设为私有并根据访问或修改变量的要求提供 get 和 set 方法始终是 oop 中的一种做法。
变量最好保持私有(尽管您可以保持公开)。并非所有变量都需要 get 和 set(访问器和修改器)函数。这取决于用例。例如,如果我持有类内部的某种计数,我不会为其提供 set(..) 方法。如果您的 get(..) 和 set(..) 方法只是返回和分配,我建议您遵循公司的编码指南。如果你可以选择 getter 和 setter。
现在我的问题是,如果您有一个声明为私有的字段的 set 方法,即使该字段不可见,用户仍然可以更改该字段的值。那么,为什么不公开该字段而不是提供一个 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();
}
HTH ..
于 2012-09-10T12:04:17.547 回答