Javaを扱っている人のバイブル的な本ですね。
今まで読んだ本について各項目について書いておりましたが、Effective Javaについては量が多いのでざっくりとした感想だけ書きたいと思います。
第3版を読みました。第2版と比較しましたが、ラムダとストリームという章が追加され、その他の章は大きくは変わってなさそうな印象でした。第2版はもちろん読んでません。
◾️追加された項目
第2章 オブジェクトの生成と消滅
項目5 資源を直接結び付けるよりも依存性注入を選ぶ
項目8 ファイナライザとクリーナーを避ける
項目9 try-finallyよりもtry-with-resourcesを選ぶ
第4章 クラスとインターフェース
項目21 将来のためにインターフェースを設計する
項目25 ソースファイルを単一のトップレベルのクラスに限定する
第7章 ラムダとストリーム(※全て追加)
項目42 無名クラスよりもラムダを選ぶ
項目43 ラムダよりもメソッド参照を選ぶ
項目44 標準の関数型インターフェースを使う
項目45 ストリームを注意して使う
項目46 ストリームで副作用のない関数を選ぶ
項目47 戻り値型としてStreamよりもCollectionを選ぶ
項目48 ストリームを並列化することは注意を払う
第8章 メソッド
項目55 オプショナルを注意して返す
第11章 並行性
項目80 スレッドよりもエグゼキュータ、タスク、ストリームを選ぶ
第12章 シリアライズ
項目85 Javaのシリアライズよりも代替手段を選ぶ
◾️感想
正直、Javaを軽くしか触っていない自分にとっては難しいところが多々ある本でした。
といっても、メソッドやプログラミング一般などは比較的な簡単な項目があったりしたので、全部が難しいわけではないです。
この本に関して初心者に読んでほしい、初心者には向かないなど色々な意見がありますが、自分は初心者の人に関しては、読み方を気をつければ読んだほうがいいかと思います。
罠にハマらないような書き方、どうすると罠にはまってしまうのかなども記載されているため、早めに直しておきたい項目が多々あるからです。
読み方としては項目毎に軽く2ページほど読んで、理解できそうかどうか、あるいは頑張れば理解できそうだったらしっかりその項目を読んで、わからなかったところは時間が経ってから読み直すといったやり方がいいと思います。
デザインパターンを知らないのに解説もされていないデザインパターンについて言及されている項目が理解できるはずがないと思います。
そういうのが多くある場合、挫折すると思うのでここは後回しでいいと割り切っていくのがいいかと思います。
自分も読んでいて心折れかけそうなときがありました。
ですので、わからなかったときに何を勉強しておくとわかるようになるのかをメモしておいてそれについて勉強してから読むぐらいの認識でいいと思います。
内容についてですが、凄く勉強になりました。
例えば 第2章のすべてのオブジェクトに共通のメソッドについてはお恥ずかしながらJava標準でのメソッドをオーバーライドをするという発想が皆無だったのでtoStringをオーバーライドするなどは新鮮でした。
第5章のジェネリック型はよく使ってますがやっぱり便利だと感じます。ArrayListがPHPにも欲しい。
第6章のenum、第7章のラムダとストリーム、第11章の並行性はぜひ使いこなしたいです。
誤解かもしれないですが継承はもうあまり使わない方がよかったりするのかな?最近はis-aよりhas-a傾向強い気がします。
この本に関しては手元に置いておいて必要な時に何度も読み返したいと思います。