The King's Museum

ソフトウェアエンジニアのブログ。

2015-08-01から1ヶ月間の記事一覧

【Effective Java】項目11:clone を注意してオーバーライドする

本項目では正しく機能する clone メソッドを、どのように、いつ実装するかを議論する。 Cloneable インタフェース Cloneable インタフェースはオブジェクトが複製を許可していることを示す。 ただし、Cloneable インタフェース自体は空のインタフェースであ…

【Effective Java】項目10:toString を常にオーバーライドする

toString をオーバライドして意味のある文字列を返すようにする。 toString のオーバーライド java.lang.Object は toString() を実装しているが、ユーザーにとってよい情報を返すわけではない。 Object obj = new Object(); // 「クラス名@ハッシュコード値…

【Effective Java】項目9:equals をオーバーライドする時は、常に hashCode をオーバーライドする

equals をオーバーライドする時は、hashCode メソッドを必ずオーバーライドしなければならない。 オーバーライドしない場合、Object.hashCode の一般契約を破ることになり、HashMap、HashSet、HashTable など、hashCode の一般契約に基づくコレクションが適…

【Effective Java】項目8:equals をオーバーライドするときは一般契約に従う

第3章『すべてのオブジェクトに共通のメソッド』に入る。 第3章は、Object.equals()、Object.hashCode()、Object.toString()、Object.clone() について、いつ、どのようにオーバーライドするかを説明する。 finalize も同様のものだが、すでに項目7で議論…

【Effective Java】項目7:ファイナライザを避ける

Java のファイナライザは予想不可能で、危険であり、一般的には使う必要はない。 C++ プログラマは Java のファイナライザを C++ のデストラクタと対応付けて考えてしまいがちだが、それは大きな間違いである。 C++ のデストラクタはコンストラクタに対応す…

【Effective Java】項目6:廃れたオブジェクト参照を取り除く

メモリリークを回避するため廃れたオブジェクトの参照は取り除かなければならない。 C や C++ から、ガーベージコレクション(GC)を持つ言語に切り替えると、メモリ管理について考える必要がないように感じることがあるが、それは間違いだ。 次のスタック実…

【Effective Java】項目5:不必要なオブジェクトの生成を避ける

機能的に同じオブジェクトを、必要になるごとに再生成するのは避ける。 よくない例 極端にだめな例としては以下の様なコードがある。 // だめな例 String s = new String("stringee"); "stringee" 自身が String オブジェクトであり、String コンストラクタ…

【Effective Java】項目4:private のコンストラクタでインスタンス化不可能を強制する

static のメソッドと static なフィールドだけからなるクラスを書く場合は private コンストラクタでインスタンス化不可能をクライアントに強制するべきである。 static ユティリティクラス そのようなクラスは悪く評価されていることもあるが、java.lang.Ma…

【Effective Java】項目3:private のコンストラクタか enum 型でシングルトン特性を強制する

シングルトンは、手短にいえば厳密に一度しかインスタンスが生成されないクラス。 ただし、クラスをシングルトンにするとデメリットも多々あるため本当に必要な場合のみ行うこと。 伝統的なシングルトン実装 Java の リリース 1.5 より前はシングルトンを実…

【Effective Java】項目2:数多くのコンストラクタパラメータに直面した時にはビルダーを検討する

多くのオプションパラメータを持つオブジェクトを生成する場合はビルダーパターンを利用することを検討する。 テレスコーピングパターン 多くのオプションパラメータが存在するとき、伝統的にはテレスコーピングコンストラクタと呼ばれるパターンが利用され…

I'm not so smart as I thought I was

今更ながら以下の記事を目にした。 http://blog.practical-scheme.net/shiro/20120109-intellectual-tools 君がAを取りつづけていたのは、勉強したからか、教科が簡単だったからだ。 それが初めてBを取ってしまったのは、理解することに慣れすぎて、ちょっと…

Principle of Reactive Programming

Effective Java シリーズの息抜きに他のネタ。 ちょっと前に Coursera の Principle of Reactive Programming 完走した。 https://www.coursera.org/course/reactive 前々からやりたいと思ってて、一回目の開講の時は他の講義やってて断念したのだけど、今年…

【Effective Java】項目1:コンストラクタの代わりに static ファクトリーメソッドを検討する

追記:2018年2月16日 Effective Java 3rd Edition を踏まえて内容をアップデートした記事を書きました。 こちらをご覧ください。 www.thekingsmuseum.info オブジェクトを生成するため、public コンストラクタの代わりに static ファクトリーメソッドを提供…

(c) The King's Museum