2章.オブジェクトの生成、削除
1.コンストラクタの代わりにstaticなファクトリメソッドの作成を考慮すべし
2.コンストラクタの引数が膨大になるときはbuilderを使うべし
- telescoping constructor と JavaBeansパターンなるものと対比させている。
- インスタンス生成において、パラメータが片手で数えられるよりも多くなるような場合にはbuilderパターンでのインスタンス生成を考えたほうが良い。
- JavaBeansパターンとするときの欠点の説明がよく分からなかった。複数回の呼び出しがあるから不整合が起きうる、みたいな話だが具体的にどういうこと?
3.シングルトンなクラス設計をするにおいては、コンストラクタをprivateにするか、ENUMを用いる手法とせよ
- ENUM型使ったシングルトンみたことないが。。
4.インスタンス化を抑制したいクラスには、privateコンストラクタを作成せよ
- utilityクラス等はインスタンス生成を抑制したいので、その時に使う模様。
5.リソースのハードコーディングを行うより、Dependency Injectionを行うべし
- 大きな規模になった場合には、フレームワークのDIの仕組みを使うべき。
- Factoryパターンを使う。
- この項目は第2版にはなかったよう。
6.不必要なオブジェクト生成は避けるべし
- defensive copyが必要な場合はその限りでない。defensive copyってなんだ?
7.使わなくなった参照は廃棄すべし
- 廃棄しないとメモリリークが起きる。
- キャッシュやコールバックを持つクラスで起こりがちな問題らしい。
- 弱参照?→以下が分かりやすい。弱参照は他からの参照(弱参照以外の参照)がなくなると、GCの対象となる。
http://www.ne.jp/asahi/hishidama/home/tech/java/weak.html
8.finalizerとcleanerの使用は避けるべし
- これらの短所は、どのように動くかの予想がつきにくいことにある。
- finalizerはパフォーマンスに深刻な悪影響を与える。
- finalizerの使用はセキュリティに悪影響を与える。以下に詳しく乗っていたが、正直よくわからん。。
https://www.ibm.com/developerworks/jp/java/library/j-fv/index.html - これらの使用の代わりに、AutoClosableの実装とtry-with-resourcesを用いていく。
9.try-finallyよりもtry-with-resourcesを使うべし
- try-finallyでtry句とfinally句で同時に例外発生した場合、try句のほうがかき消されてしまう。