Javaプログラミング
java.math.BigDecimal クラスを使用すると、hashCode() と compareTo() の違いが分かりやすいと思います。 実装 BigDecimal number1 = new BigDecimal("0"); BigDecimal number2 = new BigDecimal("0.0"); // ★a.equals(b) = true ならば a.compareTo(b) == …
equals()・hashCode() と同様にオブジェクトの比較に使用できる、compareTo() メソッドについて記述します。 compareTo() メソッドとは?(概要) オブジェクト同士を比較し、どちらが大きいか小さいかを比較することが目的です。 equals() メソッドは、オブ…
equals() メソッドと同様に、Eclipse(v3.2.0)に hashCode() メソッドを自動生成させてみました。 生成されたコード @Override public int hashCode() { final int PRIME = 31; int result = super.hashCode(); result = PRIME * result + (booleanValue ? 12…
前回で触れたように、clone() メソッドには、仕様が特殊で実装し辛いという問題があります。 オブジェクトをコピーしたいだけなのに…(´・ω・)という人のために、clone() メソッド以外でオブジェクトを複製するテクニックを紹介します。 テクニック(1)−…
Java で Prototype パターンを実現するために必要な、clone() メソッドについて記述します。 clone() メソッドの仕様 いずれも、必須ではないそうです。(´・ω・) x.clone() != x を満たすこと。 x.clone().getClass() == x.getClass() を満たすこと。 x.cl…
equals() メソッドの姉妹ともいえる、hashCode() メソッドについて記述します。 hashCode() メソッドの仕様 属性に変化がない場合、hashCode() を複数回呼び出しても、常に同一の値を返し続けること。 a.equals(b) = true ならば、a.hashCode() = b.hashCode…
Eclipse(v3.2.0)のメニューに、「ソース(S)→hashCode() および equals() の生成(H)」なるものがあったので、どんなコードを生成するのか見てみました。 生成されたコード public boolean equals(Object obj) { if (this == obj) return true; if (!super.equ…
equals() メソッドの実装にあたって、一部のデータ型については特別な処理が必要です。 特別な処理 float型の場合、Float.compare() を呼び出す必要があります。 double型の場合、Double.compare() を呼び出す必要があります。 オブジェクトの参照の場合、そ…
前回に引き続き、equals() メソッドの規約の1つ、transitivity について触れていこうと思います。 transitivity の意味 transitivity とは、a.equals(b) = true かつ b.equals(c) = true ならば c.equals(a) = true である、という意味です。 前回の symmet…
equals() メソッドの規約の1つに、symmetry があります。 これは、a.equals(b) が true ならば b.equals(a) も true でなければならないというものです。 イメージし易そうでし辛いので、以下に例を示します。 例 以下のような、何らかのタイトルを意味する…
equals() メソッドは、java.lang.Object クラスにあるメソッドで、オブジェクト同士が同じか否かを判定するものです。 初めは単純にオブジェクトの field 同士を比較するだけでよいのかと思っていたんですが、Effective Java によると、色々と細かい仕様が決…
NetBeansのプロファイラとの比較のため、TPTPをインストールしてみたんですが… JavaSE 6 Update 3 じゃ動かないんですかそうですか。 インストールする前に言って欲しかった…JavaSE 5 を追加でインストールします。。。
Effective Javaに、EnumでSingletonを実現する方法が載ってました。(1st editionにはおそらく載っていないと思います。) やり方が面白かったので載せます。 Singletonクラス public enum Singleton { SINGLETON; public void doSomething() { // omitted }…
【テーマ】 コンストラクタの引数が多い場合、何か良い方法はないか? 【概要】 GoFのデザインパターンの1つ、builderパターンを使用する方法。 パラメータの設定やimmutableなオブジェクトの生成は、Builderクラスに任せます。 【補足】 インスタンスを生…
【テーマ】 コンストラクタの引数が多い場合、何か良い方法はないか? 【概要】 いわゆるJavaBeans。 特徴は以下の通り。 privateかつfinalでないfieldを持つ。 引数なしのpublicなコンストラクタを持つ。 fieldには、getter/setterを介してアクセスする。 …
Effective Javaの全項目を網羅してまとめようとしたら内容が多すぎたのでシフトチェンジ。 同著を読んで気がついたテクニックを、少しずつうpしていきます。 完全に自己満足ですええ。(だって英語版難しいんですもの) 補足があったらよろしくです。 【テ…