Effective Java(項目17〜18)

昨日からちょっと体調崩し気味です。頭の回転が鈍い・・・うー・・・
○項目17 型を定義するためだけにインタフェースを使用する

  • 定数インタフェースはやめましょう
    • 何らかの定数を内部的にクラスが使用するということは実装の詳細である
    • ユーザを困惑させる
    • 将来的に必要なくなったときにもお荷物として残る

→Javaプラットフォームライブラリーにはjava.io.ObjectStreamConstantsなどの定数インタフェースもいくつかあるが、例外であると捉えた方が良い。定数を提供するならユーティリティクラスで。

  • というわけで?インタフェースは型を定義する為だけに使いましょう、というお話。1ページ半で終わり。


○項目18 非staticのメンバークラスよりstaticのメンバークラスを選ぶ

  • ネストしたクラス(あるクラス内に定義されたクラス)は、その定義されたクラスに仕える為だけに存在すべき

→他のクラスでも有用であるならば、それはトップレベルのクラスであるべき

  • ネストクラスは4種類
    • staticのメンバークラス
    • 非staticのメンバークラス
    • 無名クラス
    • ローカルクラス
  • staticと非static、それぞれのメンバークラスの違いは?

→エンクロージングインスタンスにアクセス可能ということでもある(thisとか使える)

  • エンクロージングインスタンスを参照する必要がない限り、staticなメンバークラスにしよう

→余計なメモリ、余計な参照

他に無名クラスがほにゃららとかローカルクラスがほにゃららとか書いてあるけど、なんだかわかったようなわかってないような・・・格好を見るにクロージャとかと絡めて整理しながら覚えると良いのかなーと思ったり思わなかったり。まだよくわかってないけど。そのうちやります。ハイ。

追記:パッと見良さ気な所を発見したのでメモ。つーかマーチン・ファウラー大先生だし、ガチだな。
http://capsctrl.que.jp/kdmsnr/wiki/bliki/?Closure