Why getter and setter methods are evil

なかなか衝撃的なタイトルですが、要は、過度のgetter/setterメソッドの公開は、オブジェクト指向の利点を失わせるということです。
たとえば、int型のプロパティのgetterを公開してしまった後で、そのプロパティをlong型に変更しなければならなくなってしまった場合、丸められることを覚悟の上でint型へキャストした結果を返すか、呼び出し元を全て修正するしかない。これは、getterを公開することによって、実装の詳細を公開してしまったからに他ならない。
そこで、どうすればよいかというと、

  • 必要最低限のgetter/setterしか用意しないこと
  • そのために、CRCカードなどを用いて、正しいクラス設計を行うこと
  • クラスではなくインターフェースのgetter/setterを用意すること

といったことが挙げられてます。また、J2SE1.5では、Metadataを用いればgetter/setterが無くてもプロパティの存在をIntrospection APIに通知出来るようになるそうです。