2016-06-21 31 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,你可以将它提取到一个单独的实用程序或服务类中。