equals メソッドをクラスに実装するためのメソッドを提供します。
これは Joshua Bloch の Effective Java で説明されているルールに従います。
特に double、float、配列の比較のルールはトリッキーです。
また、 equals() と hashCode() が首尾一貫しているかどうか確認することは困難です。
等しいと計算される2つのオブジェクトは同じハッシュコードを生成する必要があります。
しかし、 同じハッシュコードを持つ2つのオブジェクトが等しいと計算される必要はありません。
全ての関連のあるフィールドを比較を行う際の計算に含めるべきです。
取得されたフィールドは無視されるかもしれません(訳注 毎回登録した全てのフィールドを計算するわけではないと言う意味?)。
特にハッシュコードを生成するために使用するフィールドは equals メソッドで使用する必要があり、逆もまた同様です。
一般的な使用方法を以下に示します:
public boolean equals(Object o) {
if (!o instanceof MyClass) {
return false;
}
MyClass rhs = (MyClass) o;
return new EqualsBuilder()
.append(field1, rhs.field1)
.append(field2, rhs.field2)
.append(field3, rhs.field3)
.isEquals();
}
もう一つの方法として、リフレクションを使用してフィールドを比較するメソッドがあります。
普通、対象となるフィールドは private であるため、この reflectionEquals
メソッドは フィールドのアクセス制限を変更するために Field.setAccessible
を使用します。
これは適切なパーミッションが設定されていない限り、セキュリティマネージャが稼動している状態では行うことができません。
また、この方法は明らかに低速です。
このメソッドの一般的な使用方法は以下の様になります:
public boolean equals(Object o) {
return EqualsBuilder.reflectionEquals(this, obj);
}
- バージョン:
- $Id: EqualsBuilder.java,v 1.1.1.1 2004/02/13 10:02:04 hioki Exp $
- 作成者:
- Steve Downey, Stephen Colebourne
- 翻訳者:
- 日置 聡
|
フィールドの概要 |
private boolean |
isEquals
テストされたフィールドが等しいかどうか。
|
|
メソッドの概要 |
EqualsBuilder |
append(boolean[] lhs,
boolean[] rhs)
boolean の配列の長さと含まれる全ての値を比較します。
|
EqualsBuilder |
append(boolean lhs,
boolean rhs)
== を使用して2つの boolean の値が等しいかどうかを評価します。
|
EqualsBuilder |
append(byte[] lhs,
byte[] rhs)
byte の配列の長さと含まれる全ての値を比較します。
|
EqualsBuilder |
append(byte lhs,
byte rhs)
== を使用して2つの byte の値が等しいかどうかを評価します。
|
EqualsBuilder |
append(char[] lhs,
char[] rhs)
char の配列の長さと含まれる全ての値を比較します。
|
EqualsBuilder |
append(char lhs,
char rhs)
== を使用して2つの char の値が等しいかどうかを評価します。
|
EqualsBuilder |
append(double[] lhs,
double[] rhs)
double の配列の長さと含まれる全ての値を比較します。
|
EqualsBuilder |
append(double lhs,
double rhs)
doubleToLong の返すビットのパターンを比較することで2つの double の値が等しいかどうかを評価します。
|
EqualsBuilder |
append(float[] lhs,
float[] rhs)
float の配列の長さと含まれる全ての値を比較します。
|
EqualsBuilder |
append(float lhs,
float rhs)
doubleToLong の返すビットのパターンを比較することで2つの float の値が等しいかどうかを評価します。
|
EqualsBuilder |
append(int[] lhs,
int[] rhs)
int の配列の長さと含まれる全ての値を比較します。
|
EqualsBuilder |
append(int lhs,
int rhs)
== を使用して2つの int の値が等しいかどうかを評価します。
|
EqualsBuilder |
append(long[] lhs,
long[] rhs)
long の配列の長さと含まれる全ての値を比較します。
|
EqualsBuilder |
append(long lhs,
long rhs)
== を使用して2つの long の値が等しいかどうかを評価します。
|
EqualsBuilder |
append(Object[] lhs,
Object[] rhs)
2つのオブジェクトの配列の内容を掘り下げて比較を行います。
|
EqualsBuilder |
append(Object lhs,
Object rhs)
2つの Object が等しいかどうかをそのオブジェクトの equals
メソッドを使用して評価します。
|
EqualsBuilder |
append(short[] lhs,
short[] rhs)
short の配列の長さと含まれる全ての値を比較します。
|
EqualsBuilder |
append(short lhs,
short rhs)
== を使用して2つの short の値が等しいかどうかを評価します。
|
boolean |
isEquals()
評価された全てのフィールドが等しい場合に true を返します。
|
static boolean |
reflectionEquals(Object lhs,
Object rhs)
このメソッドは2つのオブジェクトが等しいかどうか判断するためにリフレクションを使用します。
|
static boolean |
reflectionEquals(Object lhs,
Object rhs,
boolean testTransients)
このメソッドは2つのオブジェクトが等しいかどうか判断するためにリフレクションを使用します。
|
| クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
isEquals
private boolean isEquals
- テストされたフィールドが等しいかどうか。
EqualsBuilder
public EqualsBuilder()
- EqualsBuilder のコンストラクタです。
初期状態では(2つの)オブジェクトは等しいとみなされます。
- 関連項目:
Object.Object()
reflectionEquals
public static boolean reflectionEquals(Object lhs,
Object rhs)
- このメソッドは2つのオブジェクトが等しいかどうか判断するためにリフレクションを使用します。
このメソッドは private フィールドの値を取得するために Field.setAccessible を使用します。
これはセキュリティマネージャが稼動していて、適切なパーミッションが設定されていない場合、
セキュリティ例外が投げられることを意味します。
このメソッドは明らかに非効率です。
transient メンバーは、おそらくフィールドの値から取得されたものでオブジェクトの値とはならないと考え、
処理の対象としません。
static フィールドは処理の対象にはなりません。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- boolean - 評価された2つのオブジェクトが等しいかどうか
reflectionEquals
public static boolean reflectionEquals(Object lhs,
Object rhs,
boolean testTransients)
- このメソッドは2つのオブジェクトが等しいかどうか判断するためにリフレクションを使用します。
このメソッドは private フィールドの値を取得するために Field.setAccessible を使用します。
これはセキュリティマネージャが稼動していて、適切なパーミッションが設定されていない場合、
セキュリティ例外が投げられることを意味します。
このメソッドは明らかに非効率です。
testTransients 引数に true が設定された場合 transient メンバーを処理の対象とし、
false が設定された場合にはフィールドの値から取得されたものでオブジェクトの値とはならないとみなし、
transient メンバーを無視します。
static フィールドは処理の対象にはなりません。
- パラメータ:
lhs - 左側
rhs - 右側
testTransients - transient フィールドを含めるかどうか
- 戻り値:
- boolean - 評価された2つのオブジェクトが等しいかどうか
append
public EqualsBuilder append(Object lhs,
Object rhs)
- 2つの
Object が等しいかどうかをそのオブジェクトの equals
メソッドを使用して評価します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(long lhs,
long rhs)
- == を使用して2つの
long の値が等しいかどうかを評価します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(int lhs,
int rhs)
- == を使用して2つの
int の値が等しいかどうかを評価します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(short lhs,
short rhs)
- == を使用して2つの
short の値が等しいかどうかを評価します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(char lhs,
char rhs)
- == を使用して2つの
char の値が等しいかどうかを評価します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(byte lhs,
byte rhs)
- == を使用して2つの
byte の値が等しいかどうかを評価します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- EqualsBuilder - used to chain calls.
append
public EqualsBuilder append(double lhs,
double rhs)
- doubleToLong の返すビットのパターンを比較することで2つの
double の値が等しいかどうかを評価します。
これは NaN、無限大、-0.0 をハンドルします。
これは HashCodeBuilder によって生成されたハッシュコードと互換性を持ちます。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(float lhs,
float rhs)
- doubleToLong の返すビットのパターンを比較することで2つの
float の値が等しいかどうかを評価します。
これは NaN、無限大、-0.0 をハンドルします。
これは HashCodeBuilder によって生成されたハッシュコードと互換性を持ちます。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(boolean lhs,
boolean rhs)
- == を使用して2つの
boolean の値が等しいかどうかを評価します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- EqualsBuilder - used to chain calls.
append
public EqualsBuilder append(Object[] lhs,
Object[] rhs)
- 2つのオブジェクトの配列の内容を掘り下げて比較を行います。
また、このメソッドは多次元配列、不完全な配列(訳注 ragged を無理やり訳しました)、複数の型の配列の比較の際にも呼ばれます。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(long[] lhs,
long[] rhs)
long の配列の長さと含まれる全ての値を比較します。
このメソッドは append(long, long) を利用します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(int[] lhs,
int[] rhs)
int の配列の長さと含まれる全ての値を比較します。
このメソッドは append(int, int) を利用します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(short[] lhs,
short[] rhs)
short の配列の長さと含まれる全ての値を比較します。
このメソッドは append(short, short) を利用します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(char[] lhs,
char[] rhs)
char の配列の長さと含まれる全ての値を比較します。
このメソッドは append(char, char) を利用します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(byte[] lhs,
byte[] rhs)
byte の配列の長さと含まれる全ての値を比較します。
このメソッドは append(byte, byte) を利用します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(double[] lhs,
double[] rhs)
double の配列の長さと含まれる全ての値を比較します。
このメソッドは append(double, double) を利用します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(float[] lhs,
float[] rhs)
float の配列の長さと含まれる全ての値を比較します。
このメソッドは append(float, float) を利用します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
append
public EqualsBuilder append(boolean[] lhs,
boolean[] rhs)
boolean の配列の長さと含まれる全ての値を比較します。
このメソッドは append(boolean, boolean) を利用します。
- パラメータ:
lhs - 左側
rhs - 右側
- 戻り値:
- 連結してコールするために使用される EqualsBuilder
isEquals
public boolean isEquals()
- 評価された全てのフィールドが等しい場合に true を返します。
- 戻り値:
- boolean
このドキュメントは、Ja-Jakartaにより訳されました。 コメントがある場合は report@jajakarta.orgまでお願いします。
Translated into Japanese by jajakarta.org. The original page is here.
Copyright (c) 2002-2003 - Apache Software Foundation