Effective Java 第3版


Effective Java 第3版


丸善出版


著者:Joshua Bloch
訳者:柴田芳樹


日本語版によせて
訳者まえがき
Effective Javaによせて
まえがき
謝辞
第1章 はじめに

第2章 オブジェクトの生成と消滅
項目1 コンストラクタの代わりにstaticファクトリーメソッドを検討する
項目2 多くのコンストラクタパラメータに直面した時にはビルダーを検討する
項目3 privateのコンストラクタがenum型でシングルトン特性を強制する
項目4 privateのコンストラクタでインスタンス化不可能を強制する
項目5 資源を直接結び付けるよりも依存注入を選ぶ
項目6 不必要なオブジェクトの生成を避ける
項目7 使われなくなったオブジェクト参照を取り除く
項目8 ファイナライザとクリーナを避ける
項目9 try-finallyよりもtry-with-resourcesを選ぶ

第3章 すべてのオブジェクトに共通のメソッド
項目10 equalsをオーバーライドする時は一般契約に従う
項目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版に対する項目
参考文献
索引

書籍目次

Posted by shi-n