我有2个A级和B级,里面有不同的成员。为了比较同一个类的对象,我已经覆盖了它们的hashCode()
和equals()
方法。
根据某些因素,我必须比较A的ArrayList
中的项目或B中的ArrayList
项目。实际上,两种情况下的算法都相同,所以我宣布了一个抽象类C,让A和B扩展它。
现在我总是有一个ArrayList
的C,但是比较它们之间的项目,我猜测使用的equals()
方法是Object类继承的方法。
那么如何使用同一个类处理这两种情况呢?
修改 实施例
在名为R的类中,有两个ArrayLists:ArrayList<A>
和ArrayList<B>
。公共方法定义如下:
public ArrayList<Object> getList(ListType whichOne) {
switch (whichOne) {
case A:
return mListA;
case B:
return mListB;
}
return null;
}
我会返回一个ArrayList,因为我不关心列表中的哪些项目。我只需要删除其中一些或移动到列表中的其他位置。
我知道ArrayList<Object>
不是其他ArrayLists的超类型。那我怎么能这样做呢?
答案 0 :(得分:1)
你没有任何事可做。 equals()
被称为多态。这是一个例子。假设您的A类为Integer
,而您的C类为Object
。
Integer first = new Integer(456);
Integer second = new Integer(456)
assertTrue(first.equals(second));
assertFalse(first == second);
List<Object> list = new ArrayList<>();
list.add(first);
assertTrue(list.contains(second));
编辑:
您的方法的返回类型应为List<? extends C>
答案 1 :(得分:0)
尝试使用Comparator 你可以用这种方式比较对象