是否有充分的理由使用公共财产/领域?

NT3*_*3RP 8 language-agnostic oop

面向对象编程的一个重要部分是封装,但公共属性/字段往往会破坏这种封装.在什么情况下公共财产或领域真的有意义?

注意:我只使用术语"属性"或"字段",因为术语因语言而异.通常,我指的是属于可以从对象外部访问和设置的对象的变量.

And*_*mas 6

是的,有时候有充分的理由.信息隐藏通常是可取的.但偶尔有一些例外.

例如,公共字段对于以下内容是合理且有用的:

  • C++ pimpl - 一个包含另一个类的私有实现的结构/类.其字段可以公开声明,但通常只能在一个源文件中由持有pimpl的类访问.
  • 恒定的字段.例如,Joshua Bloch在Effective Java中写道:"允许类通过公共静态最终字段公开常量."
  • 用于C和C++之间通信的结构.
  • 仅表示数据的类型,其表示不太可能发生变化.例如,javax.vecmath.Point3d,表示{x,y,z}坐标.