Java:直接从同一个类的另一个实例访问私有字段

Nic*_*ner 11 java scope private member

我正在equals(Object obj)为一个班级写一个函数.我看到可以obj从调用者访问私有字段.所以不要使用getter:

Odp other = (Odp) obj;
if (! other.getCollection().contains(ftw)) {

}
Run Code Online (Sandbox Code Playgroud)

我可以直接访问该字段:

Odp other = (Odp) obj;
if (! other.collection.contains(ftw)) {

}
Run Code Online (Sandbox Code Playgroud)

这是不好的做法吗?

dj_*_*ult 9

我倾向于总是使用吸气剂,因为有时吸气剂不仅仅是"返回(foo)".有时,如果它们为空,或者在其中包含一些调试日志,或者以某种方式验证当前状态,它们会初始化.它更加一致.


sep*_*p2k 6

不,这不对.私有变量和方法无法从其他类访问的原因是允许您更改类的内部,而无需更改使用该类的所有代码(并且防止类的用户例如设置变量)到一个它从未应该拥有的价值.

如果你使用其他对象的私有变量不会伤害任何东西,因为如果你重构你的类的内部,你必须改变类中的代码.

  • "将课程更紧密地结合在一起" - 哪些课程?这里只涉及一个班级,你不能将一个班级与自己"脱钩". (4认同)
  • 我不同意这个答案.最好使用访问器. (2认同)

akf*_*akf 5

我不认为这是不好的做法,而是语言的一个特点.它不仅允许您测试您equals的工作方式,而且在创建对象的Prototype模式中也很有用.