2016-06-21 7 views
0

こんにちは、事前にすべておよびTHX @/List.containsのために等しい比較します。は、私の状況のた​​めの偉大なベストプラクティスがある場合、私は現在、不思議</p> <p>、(OBJ)

  • あなたにはオブジェクトがあるとします。顧客タイプのオブジェクトを考えてみましょう。
  • Customerオブジェクトには、(n-1)個のフィールドがあります。
  • eclipseのコンテキストメニュー>>ソース>> hashCode()とequals()を生成して、hashCodeとequalsメソッドを実装しています... すべての(n-1)フィールドを使用します。これは一般的には実際には悪いことではありません。

特定のメソッド内の別個のサービスクラスに、Customers> List myCustomersのリストがあります。

このメソッドでは、条件myCustomers.contains(specificCustomer)を使用してif-elseのケースを実装します。

if (myCustomer.contains(specificCustomer)) { 
    // todo 
} else { 
    // todo 
} 

したがって、list.contains(obj)は、オブジェクトのequalsメソッドを内部的に使用します。これは、リストにオブジェクトが含まれているかどうかを確認する一般的な方法です。

BUT 私の場合、標準のhashCodeとequalsはallready(n-1)フィールドで実装されています。そして、私が望むのは、オブジェクトの特定のフィールド、たとえば(n-5)フィールドだけをチェックする.contains(obj)メソッドを使用することです。

コードの他の部分がすでにこれを使用しているため、既存のhashCodeとequalsを変更したくありません。そして私がそうするなら、私はその後の行動を予測することはできません。

また、私はCustomerクラス内に別のメソッドを記述し、if-else-conditionでのみ使用することは望ましくありません。

だから、誰かがこれを行うには、アイデア、ベストプラクティスまたは素晴らしいパターンを持っていますか?

+1

ベストプラクティスを検索しないようにしてください。 – AdamSkywalker

+0

私の意見に基づくソリューション:N-5フィールドを使用するメソッドequalsXXXを作成し、リストを反復してequalsXXXメソッドを使用して等価性をチェックするメソッドを作成します。 – AdamSkywalker

答えて

0

ビジネスロジックの特定の部分(n-5フィールドは等しい)を使用して特定のコードをどこかに配置する必要があります。最も簡単なのは、標準contains呼び出しをカスタムメソッドに置き換えてリストを反復し、カスタムequalsロジックを使用して一致する項目があるかどうかを確認することです。より多くの場所でこのバージョンのequalsが必要な場合は、それを別のユーティリティまたはサービスクラスに抽出できます。

関連する問題