【Effective Java】項目14:public のクラスでは、public のフィールドではなく、アクセッサーメソッドを使う

クラスがパッケージの外からアクセス可能ならば(public ならば)、ゲッターとセッターを提供するべき。

public なクラスがデータフィールドを公開すると、その内部的な表現を永久に変更できなくなる。

一方、クラスがパッケージプライベート・private のネストしたクラスの場合には、データフィールドを public にすることは本質的に問題ない。 一般的に、パッケージ内であれば自分の都合で変更することができるからだ。

Java ライブラリにおいていくつかのクラスはこの提言を無視している。 例えば java.awt の Point クラスや Dimension クラスである。 これはあまり参考にするべきではない例で、実際 Dimension クラスは内部表現が変更できないために重大なパフォーマンス問題を引き起こしている。

フィールドが不変な場合、public としてフィールドを公開することは、害は少ないが、一般的にはゲッターとセッターを提供するべき。

感想

セッタとゲッタの話。

いかにも Java って感じになって、構文上はあんまり美しくないな~とか思うけど、セッタとかゲッタがちゃんと書いてあると妙な安心感が生まれるような気がする。