reading

Effective Java 第 2 版:第 4 章 項目 20, 21

項目 20: タグ付クラスよりクラス階層を選ぶ 後の章で出てくる enum をタグとして持たせたタグ付クラスはよくないという話。 わざわざこの悪い方法をとる人はあまりいなさそうな気もする。 以下のようなクラスを考える。 class Figure { enum Shape { RECTAN…

Effective Java 第 2 版:第 4 章 項目 18, 19

項目 18: 抽象クラスよりインタフェースを選ぶ インタフェースの利点 主に以下の利点がある。 簡単に実装できる ミックスインを実現しやすい 階層になっていないフレームワークを組織できる ラッパークラスイディオムを利用できる 骨格実装を提供できる 骨格…

Effective Java 第 2 版:第 4 章 項目 16, 17

項目 16: 継承よりコンポジションを選ぶ 継承を避けておきたい理由 あるサブクラスはスーパークラスの実装に依存してしまうため。 スーパークラスの実装が変わったら、サブクラスの実装も追随して書き換えなければならない。 解決法:コンポジション コンポ…

Effective Java 第 2 版:第 4 章 項目 15

項目 14: 可変性を最小限にする この項目では、不変クラスの作り方に関して説明されている。 不変クラスは、生成したインスタンスの状態を変更できないようなクラスのことである。 String, 基本データクラス(BigInteger なども)は不変クラスである。 例え…

Effective Java 第 2 版:第 4 章 項目 13, 14

亀の歩みで読み進めている Effective Java は第 4 章へ入った。 第 4 章は「クラスとインフェース」。 この章では、Java でクラスやインタフェースの機能を適切に使うための方法が説明されている。 今回は 項目 13, 14 をメモ。 項目 13: クラスとメンバーへ…

Effective Java 第 2 版:第 3 章 項目 11

clone を注意してオーバーライドする Object.clone は適切にオーバーライドしないと問題が起こるという話。 clone はあるオブジェクトのコピーを返すメソッドである。 Object (Java Platform SE 8 ) 例えば、GoF のデザインパターンの一つ、"Prototype" パタ…

Effective Java 第 2 版:第 3 章 項目 10

toString を常にオーバーライドする Object.toString をオーバーライドしておくと、クラスが使いやすくなるという話。 toString はオブジェクトを表現する文字列を返すメソッドである。 toString がオーバーライドされているクラスのオブジェクトを println …

Effective Java 第 2 版:第 3 章 項目 9

equals をオーバーライドする時は、常に hashCode をオーバーライドする 今回は、Object.hashCode の一般契約についての話。 hashCode は、あるオブジェクトのハッシュ値を返すメソッドである。 Object (Java Platform SE 8 ) java.util.HashMap のようなコ…

Effective Java 第 2 版:第 3 章 項目 8

本項から、第 3 章「すべてのオブジェクトに共通のメソッド」に入る。 Object クラスのメソッドには、一般契約と呼ばれる使用上の決まりが存在する。 この契約を守って Object クラスのメソッドをオーバーライドしないと、契約を元に設計されている別のクラ…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 7

ファイナライザを避ける Effective Java 第 2 版、第 2 章の項目 7。 ファイナライザはオブジェクトがガベージコレクション (GC) により破棄されるときに呼び出されるメソッドである。 Java では Object クラスで protected void finalize() として定義され…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 6

廃れたオブジェクト参照を取り除く 自前でメモリ管理しているときは、廃れた参照が現れてメモリリークを起きることを防がなければならないという話。 廃れた参照とは、存在しているが使われることのない参照のことである。 例えば、配列を用いてオブジェクト…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 5

不必要なオブジェクトの生成を避ける リソースを効率よく使うためには、以下のような不必要なオブジェクトの生成はできるだけ避けたいという話。 不変クラスを毎回 new メソッドが呼び出されるごとの高コストなオブジェクトの生成 アダプターの複数個生成 意…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 4

private のコンストラクタでインスタンス化不可能を強制する java.lang.Math のような、static な関数や定数を集めたユーティリティクラスはインスタンス化する意味がないので、インスタンス化できないようにコンストラクタを書く必要がある。 これはシング…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 3

private のコンストラクタか enum 型でシングルトン特性を強制する Java でシングルトンを実装するときは、 static ファクトリーメソッド(項目 1 参照) 列挙型 (enum) のどちらかを使うのがよい。 一方、public static フィールドにインスタンスを保持する…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 2

数多くのコンストラクタパラメータに直面したときはビルダーを検討する 多くのフィールドを持ち、それに伴って多くのコンストラクタパラメータを持つクラスは、初期化のコードを書くときに煩雑であったり、可読性に難があることが多い。 このときに、ビルダ…

Effective Java 第 2 版:第 2 章 オブジェクトの生成と消滅 項目 1

現在、Joshua Bloch の Effective Java 第 2 版を読んでいるので、しばらくはこの本の読書メモを書いていく。 項目 1: コンストラクタの代わりに static ファクトリーメソッドを検討する インスタンスを生成するためには、コンストラクタを使うのが普通の方…