対応付けのキーとセットでのカスタムデータ型の使用
対応付けでは、使用する Apex クラスのインスタンスをキーまたは値のいずれかとして追加できます。それらをキーとして追加する場合、対応付けが正しく機能してキーによって正しい値が取得されるようにするには、クラスで実装する必要のある特別な規則がいくつかあります。同様に、設定要素がカスタムクラスのインスタンスである場合、クラスはこれらと同じ規則に従う必要があります。
対応付けのキーまたはセット要素にカスタムデータ型 (Apex クラス) を使用する場合、クラスで equals メソッドと hashCode メソッドを提供します。Apex はこの 2 つのメソッドを使用して、オブジェクトのキーの等価と一意性を判断します。
クラスへの equals メソッドと hashCode メソッドの追加
- 署名付きの equals メソッドを次に示します。equals メソッドの実装時には、次の点に留意してください。クラスの x、y、z が null 以外のインスタンスである場合、equals メソッドは次の条件を満たす必要があります。
- 反射性: x.equals(x)
- 対称性: x.equals(y) は、y.equals(x) が true を返す場合にのみ true を返す
- 推移性: x.equals(y) が true を返し、かつ y.equals(z) が true を返す場合、x.equals(z) は true を返す
- 整合性: x.equals(y) の複数の呼び出しで常に true を返すか常に false を返す
- null 以外の参照値 x では、x.equals(null) は false を返す
Apex の equals メソッドは、Java の equals メソッドに基づいています。
- 署名付きの hashCode メソッドを次に示します。hashCode メソッドの実装時には、次の点に留意してください。
- hashCode メソッドが Apex 要求の実行中に同じオブジェクトで複数回呼び出された場合、同じ値を返す必要がある
- equals メソッドで 2 つのオブジェクトが等価とされた場合、hashCode は同じ値を返す必要がある
- equals メソッドで 2 つのオブジェクトが等価でないとされた場合、hashCode は異なる値を返す必要はない
Apex の hashCode メソッドは、Java の hashCode メソッドに基づいています。
サンプル
このサンプルでは、equals メソッドと hashCode メソッドの実装方法を示します。これらのメソッドを提供するクラスが最初に表示されています。2 つの Integer を取るコンストラクタも含まれています。2 番目のサンプルはコードスニペットで、このクラスの 3 つのオブジェクトを作成し、そのうち 2 つは値が同じです。次に、ペアオブジェクトをキーとして使用して対応付けエントリが追加されます。最後に追加されたエントリには最初のエントリと同じキーが含まれているため、最初のエントリが上書きされ、サンプルでは対応付けに 2 つのエントリのみが存在することが確認されます。次に、== 演算子を使用します。クラスは equals を実装するため、この演算子は期待どおりに機能します。また、対応付けに特定のキーが含まれているかどうかの確認、デバッグログへのすべてのキーと値の書き込みなど、その他のいくつかの対応付け操作が実行されます。最後に、セットを作成してそのセットに同じオブジェクトを追加します。3 つのオブジェクトのうち 2 つのみが一意であるため、セットのサイズが 2 であることを確認します。
このコードスニペットは PairNumbers クラスを使用します。