magazine.gif Effective Java 第2版

日本語版によせて
訳者まえがき
Effective Javaによせて
まえがき
謝辞

第1章 はじめに

第2章 オブジェクトの生成と消滅

  • 項目1 コンストラクタの代わりにstaticファクトリーメソッドを検討する
  • 項目2 数多くのコンストラクタパラメータに直面した時にはビルダーを検討する
  • 項目3 privateのコンストラクタがenum型でシングルトン特性を強制する
  • 項目4 privateのコンストラクタでインスタンス化不可能を強制する
  • 項目5 不必要なオブジェクトの生成を避ける
  • 項目6 廃れたオブジェクト参照を取り除く
  • 項目7 ファイナライズを避ける

第3章 すべてのオブジェクトに共通のメソッド

  • 項目8 equalsをオーバーライドする時は一般契約に従う
  • 項目9 equalsをオーバーライドする時は、常にhashCodeをオーバーライドする
  • 項目10 toStringを常にオーバーライドする
  • 項目11 cloneを注意してオーバーライドする
  • 項目12 Comparableの実装を検討する

第4章 クラスとインタフェース

  • 項目13 クラスとメンバーへのアクセス可能性を最小限にする
  • 項目14 publicのクラスでは、publicのフィールドではなく、アクセッサーメソッドを使う
  • 項目15 可変性を最小限にする
  • 項目16 継承よりコンポジションを選ぶ
  • 項目17 継承のために設計および文書かする、でなければ継承を禁止する
  • 項目18 抽象クラスよりインタフェースを選ぶ
  • 項目19 型を定義するためだけにインタフェースを使用する
  • 項目20 タグ付クラスよりクラス階層を選ぶ
  • 項目21 戦略を表現するために関数オブジェクトを使用する
  • 項目22 非staticのメンバークラスよりstaticのメンバークラスを選ぶ

第5章 ジェネリックス

  • 項目23 新たなコードで原型を使用しない
  • 項目24 無検査警告を取り除く
  • 項目25 配列よりリストを選ぶ
  • 項目26 ジェネリック型を使用する
  • 項目27 ジェネリックメソッドを使用する
  • 項目28 APIの柔軟性向上のために境界ワイルドカードを使用する
  • 項目29 型安全な異種コンテナーを検討する

第6章 enumとアノテーション

  • 項目30 int定数の代わりにenumを使用する
  • 項目31 序数の代わりにインスタンスフィールドを使用する
  • 項目32 ビットフィールドの代わりにEnumSetを使用する
  • 項目33 序数インデックスの代わりにEnumMapを使用する
  • 項目34 拡張可能なenumをインタフェースで模倣する
  • 項目35 命名パターンよりアノテーションを選ぶ
  • 項目36 常にOverrideアノテーションを使用する
  • 項目37 型を定義するためにマーカーインタフェースを使用する

第7章 メソッド

  • 項目38 パラメータの正当性を検査する
  • 項目39 必要な場合にはm防御的にコピーする
  • 項目40 メソッドのシグネチャを注意深く設計する
  • 項目41 オーバーロードを注意して使用する
  • 項目42 可変長引数を注意して使用する
  • 項目43 nullではなく、空配列か空コレクションを返す
  • 項目44 すべての公開API要素に対してドキュメントコメントを書く

第8章 プログラミング一般

  • 項目45 ローカル変数のスコープを最小限にする
  • 項目46 従来のforループよりfor-eachループを選ぶ
  • 項目47 ライブラリーを知り、ライブラリーを使う
  • 項目48 正確な答えが必要ならば、floatとdoubleを避ける
  • 項目49 ボクシングされた基本データより基本データ型を選ぶ
  • 項目50 他の型が適切な場所では、文字列を避ける
  • 項目51 文字列結合のパフォーマンスに用心する
  • 項目52 インタフェースでオブジェクトを参照する
  • 項目53 リフレクションよりインタフェースを選ぶ
  • 項目54 ネイティブメソッドを注意して使用する
  • 項目55 注意して最適化する
  • 項目56 一般的に受け入れられている命名規約を守る

第9章 例外

  • 項目57 例外的状態にだけ例外を使用する
  • 項目58 回復可能な状態にはチェックされる例外を、プログラミングエラーには実行時例外を使用する
  • 項目59 チェックされる例外を不必要に使用するのを避ける
  • 項目60 標準例外を使用する
  • 項目61 抽象概念に適した例外をスローする
  • 項目62 各メソッドがスローするすべての例外を文書化する
  • 項目63 詳細メッセージにエラー記録情報を含める
  • 項目64 エラーアトミック性に努める
  • 項目65 例外を無視しない

第10章 並行性

  • 項目74 Serializableを注意して実装する
  • 項目75 カスタムシリアライズ形式の使用を検討する
  • 項目76 防御的にreadObjectを書く
  • 項目77 インスタンス制御に対してはmreadResolveよりenum型を選ぶ
  • 項目78 シリアライズされたインスタンスの代わりに、シリアライズ・プロキシを検討する

付録 初版に対する項目参考文献索引