Effective Java 第3版

-Effective Java 第3版 | Joshua Bloch, 柴田 芳樹 |本 | 通販 | Amazon
--https://www.amazon.co.jp/dp/4621303252?tag=nilabwiki-22&linkCode=osi&th=1&psc=1
-->Javaプログラマーにとって必読の定番書『Effective Java』の改訂第3版。
-->
-->この第3版では、Java 8で新たに導入されたラムダとストリームに関する章が新規に追加されたほか、
-->オプショナル、インタフェースでのデフォルトメソッド、try-with-resources文、@SafeVarargsアノテーション、
-->モジュールなどの機能を扱った項目を含み、第2版の78項目から90項目に増加しています。
-->
-->今日ではJavaは大きく複雑になり、並列実行から、繰り返し、各種データの表現まで、多くの事柄に対して多様な抽象化を持ち合わせています。
-->この大きさと複雑さを考えると、最新のベストプラクティスの指導書はなおさら重要です。
-->
-->本書は多くのデザインパターンとイデオムを示すコード例を含んでおり、
-->プログラミング言語Javaの正しい理解と、簡潔で明瞭で正確なソフトウェアの設計に役立つでしょう。

-Effective Java 第3版 - 丸善出版 理工・医学・人文社会科学の専門書出版社
--https://www.maruzen-publishing.co.jp/item/b303408.html
-->目次
-->第1章 はじめに
-->第2章 オブジェクトの生成と消滅
--> 項目1 コンストラクタの代わりにstaticファクトリメソッドを検討する
--> 項目2 多くのコンストラクタパラメータに直面したときにはビルダーを検討する
--> 項目3 privateのコンストラクタかenum型でシングルトン特性を強制する
--> 項目4 privateのコンストラクタでインスタンス化不可能を強制する
--> 項目5 資源を直接結び付けるよりも依存性注入を選ぶ
--> 項目6 不必要なオブジェクトの生成を避ける
--> 項目7 使われなくなったオブジェクト参照を取り除く
--> 項目8 ファイナライザとクリーナーを避ける
--> 項目9 try-よりもtry-with-resourcesを選ぶ
-->第3章 すべてのオブジェクトに共通のメソッド
--> 項目10 equalsをオーバーライドsるときは一般契約に従う
--> 項目11 equalsをオーバーライドするときは、常にhashCodeをオーバーライドする
--> 項目12 toStringを常にオーバーライドする
--> 項目13 cloneを注意してオーバーライドする
--> 項目14 Comparableの実装を検討する
-->第4章 クラスとインタフェース
--> 項目15 クラスとメンバーへのアクセス可能性を最小限にする
--> 項目16 publicのクラスでは、publicのフィールドではなく、アクセッサ―メソッドを使う
--> 項目17 可変性を最小限にする
--> 項目18 継承よりもコンポジションを選ぶ
--> 項目19 継承のために設計および文書化する、でなければ継承を禁止する
--> 項目20 抽象クラスよりもインタフェースを選ぶ
--> 項目21 将来のためにインタフェースを設計する
--> 項目22 型を定義するためだけにインタフェースを使う
--> 項目23 タグ付きクラスよりもクラス階層を選ぶ
--> 項目24 非staticのメンバークラスよりもstaticのクラスに限定する
--> 項目25 ソースファイルを単一のトップレベルのクラスに限定する
-->第5章 ジェネリックス
--> 項目26 原形を使わない
--> 項目27 無検査警告を取り除く
--> 項目28 配列よりもリストを選ぶ
--> 項目29 ジェネリック型を使う
--> 項目30 ジェネリックメソッドを使う
--> 項目31 APIの柔軟性向上のために境界ワイルドカードを使う
--> 項目32 ジェネリックスと過変長引数を注意して組み合わせる
--> 項目33 型安全な異種コンテナを検討する
-->第6章 enumとアノテーション
--> 項目34 int定数の代わりにenumを使う
--> 項目35 序数の代わりにインスタンスフィールドを使う
--> 項目36 ビットフィールドの代わりにEnumSetを使う
--> 項目37 序数インデックスの代わりにEnumMapを使う
--> 項目38 拡張可能なenumをインタフェースで模倣する
--> 項目39 命名パターンよりもアノテーション選ぶ
--> 項目40 常にOverrideアノテーションを使う
--> 項目41 型を定義するためにマーカーインタフェースを使う
-->第7章 ラムダとストリーム
--> 項目42 無名クラスよりもラムダを選ぶ
--> 項目43 ラムダよりもメソッド参照を選ぶ
--> 項目44 標準の関数型インタフェースを使う
--> 項目45 ストリームを注意して使う
--> 項目46 ストリームで副作用のない関数を選ぶ
--> 項目47 戻り値型としてStreamよりもCollectionを選ぶ
--> 項目48 ストリームを並列化するときは注意を払う 
-->第8章 メソッド
--> 項目49 パラメータの正当性を検査する
--> 項目50 必要な場合、防御的にコピーする
--> 項目51 メソッドのシグニチャを注意深く設計する
--> 項目52 オーバーロードを注意して使う
--> 項目53 可変長引数を注意して使う
--> 項目54 nullではなく、空コレクションか空配列を返す
--> 項目55 オプショナルを注意して返す
--> 項目56 すべて公開のAPI要素に対してドキュメントコメントを書く
-->第9章 プログラミング一般
--> 項目57 ローカル変数のスコープを最小限にする
--> 項目58 従来のforループよりもfor―eachループを選ぶ
--> 項目59 ライブラリを知り、ライブラリを使う
--> 項目60 正確な答えが必要ならば、floatとdoubleを避ける
--> 項目61 ボクシングされた基本データよりも基本データ型を選ぶ
--> 項目62 他の型が適切な場所では、文字列を避ける
--> 項目63 文字列結合のパフォーマンスに用心する
--> 項目64 インタフェースでオブジェクトを参照する
--> 項目65 リフレクションよりもインタフェースを選ぶ
--> 項目66 ネイティブメソッドを注意して使う
--> 項目67 注意して最適化する
--> 項目68 一般的に受け入れられている命名規約を守る
-->第10章 例外
--> 項目69 ローカル変数のスコープを最小限にする
--> 項目70 回復可能な状態にはチェックされる例外を、プログラミングエラーには実行時例外を使う
--> 項目71 チェックされる例外を不必要に使うのを避ける
--> 項目72 標準的な例外を使う
--> 項目73 抽象概念に適した例外をスローする
--> 項目74 各メソッドがスローするすべての例外を文書化する
--> 項目75 詳細メッセージにエラー記録情報を含める
--> 項目76 エラーアトミック性に努める
--> 項目77 例外を無視しない
-->第11章 並行性
--> 項目78 共有された可変データへのアクセスを同期する
--> 項目79 過剰な同期は避ける
--> 項目80 スレッドよりもエグゼキュータ、タスク、ストリームを選ぶ
--> 項目81 waitとnotifyよりも並行処理ユーティリティを選ぶ
--> 項目82 スレッド安全性を文書化する
--> 項目83 遅延初期化を注意して使う
--> 項目84 スレッドスケジューラに依存しない
-->第12章 シリアライズ
--> 項目85 Javaのシリアライズよりも代替手段を選ぶ
--> 項目86 Serializableを細心の注意を払って実装する
--> 項目87 カスタムシリアライズ形式の使用を検討する
--> 項目88 防御的にreadObjectメソッドを書く
--> 項目89 インスタンス制御に対しては、readResolveよりもenum型を選ぶ
--> 項目90 シリアライズされたインスタンスの代わりに、シリアライズ・プロキシを検討する
-->付録 第2版に対応する項目

-Effective Java プログラミング言語ガイド (第1版)
--http://www.nilab.info/wiki/Book4894714361.html