如何以相同的方式处理2个类的2个对象

时间:2013-07-19 14:54:49

标签: java abstraction

我有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的超类型。那我怎么能这样做呢?

2 个答案:

答案 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 你可以用这种方式比较对象