Effective Java 第3版

Effective Java 第3版(電子書籍)

原書名 Effective Java Third Edition
著者名 柴田 芳樹
発行元 丸善出版
発行年月日 2018年10月
NDCコード 548

内容紹介

Javaプログラマーにとって必読の定番書『Effective Java』の改訂第3版。

この第3版では、Java 8で新たに導入されたラムダとストリームに関する章が新規に追加されたほか、オプショナル、インタフェースでのデフォルトメソッド、try-with-resources文、@SafeVarargsアノテーション、モジュールなどの機能を扱った項目を含み、第2版の78項目から90項目に増加している。

今日ではJavaは大きく複雑になり、並列実行から、繰り返し、各種データの表現まで、多くの事柄に対して多様な抽象化を持ち合わせる。
この大きさと複雑さを考えると、最新のベストプラクティスの指導書はなおさら重要になる。

本書は多くのデザインパターンとイデオムを示すコード例を含んでおり、プログラミング言語Javaの正しい理解と、簡潔で明瞭で正確なソフトウェアの設計に役立つだろう。

 

目次

第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版に対応する項目

関連商品