2016-06-21 33 views
0

高/等於@所有和THX提前,具體比較了List.contains(OBJ)

我目前不知道是否有我的情況有很大最佳實踐。

  • 考慮你有一個對象。假設一個Customer類型的對象。
  • 在客戶對象中,您有(n-1)個字段。
  • 現在你正在通過eclipse上下文菜單實現hashCode和equals方法>> Sources >>生成hashCode()和equals()... 它使用所有(n-1)字段來實現。在一般情況下,這其實並不是一件壞事。

在特定的方法中,在一個單獨的服務類中增加額外的客戶>>列表myCustomers。

在這種方法中,我使用條件myCustomers.contains(specificCustomer)實現一個if-else的情況。

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

所以list.contains(obj)在內部使用對象的equals方法。這是檢查列表是否包含對象的一般方法。

但是 在我的情況下,我有標準的hashCode,並且等於allready已經實現所有(n-1)字段。我想要的是使用/ .contains(obj)方法,它只檢查對象的特定字段,例如(n-5)字段。

我不想修改現有的hashCode和equals,因爲代碼的其他部分已經在使用這個。如果我這樣做,我無法預測事後的行爲。

另外我不想在Customer類中編寫一個單獨的方法,只在if-else條件中使用它。

那麼,有沒有人有一個想法,最佳實踐或偉大的模式,以完成這項工作?

+1

嘗試不搜索最佳實踐,他們通常是基於意見的 – AdamSkywalker

+0

我的意見爲基礎的解決方案:創建使用N-5字段的方法equalsXXX,創建迭代列表並使用equalsXXX方法檢查相等性的方法 – AdamSkywalker

回答

0

您希望使用特定的業務邏輯(n-5字段等於),因此您必須在某處輸入特定的代碼段。想到的最簡單的方法是使用遍歷列表的自定義方法替換標準contains調用,並檢查是否存在使用自定義等號邏輯匹配的項目。如果你在更多的地方需要這個版本的equals,你可以將它提取到一個單獨的實用程序或服務類中。