【发布时间】:2015-11-30 21:46:52
【问题描述】:
我想使用indexOf,但List 中的对象不是相等的对象,但它们的值相等(即它们相等但不相等)。
我想让indexOf 以不同于Object.equals 方法的方式进行比较。我正在考虑重写 equals 方法以使用我的 isEquivalent 方法,但我不确定如何做到这一点,如果可能的话。
我已经尝试了很多变体,但总是出错:
List<CustomType> items{
@Override
public boolean equals(Object o)
{
return false;
}
}
= //stuff to populate it
我还看到this answer 他们谈论 EqualityComparer 在 java 中有类似的东西吗?
或者有没有其他方法可以做到这一点?
【问题讨论】:
-
也许您遇到错误是因为
equals返回boolean而不是void? -
@cricket_007 哈哈哎呀,现在解决了。不,这不是原因
-
也许添加您的
isEquivalent方法。此外,根据您在此处的内容,您试图覆盖List接口上的equals,而不是CustomType对象。 -
@cricket_007 问题不在于我的 isEquivalent 方法,因为如果我只返回 false,它就是同一种错误。你说的第二部分是什么意思?我不是在尝试覆盖列表上的等号,以便在调用使用等号的 items.indexOf 时,它会使用我发布的等号,对吗?
-
不,按照您的编写方式,您正在为 List 定义 equals。例如,您需要(格式较差)
class CustomType { @Override boolean equals(Object o) { } },因为indexOf在它包含的对象上使用equals。
标签: java equals equality indexof