覆盖Android Java Comparator类

时间:2012-08-01 07:10:35

标签: java android inheritance

我有一个基类,其中包含以下行来排序我的对象ArrayList:

Collections.sort(objects, SortObjectList);

它还包括以下类定义来定义排序:

private class SortObjectList implements Comparator<T>
{
    public int compare(T lhs, T rhs) 
    {
        return lhs.name.compareToIgnoreCase(rhs.name);
    }
}

为了允许派生类使用不同的标准进行排序,我实现了以下内容:

Collections.sort(objects, getSortObjectClass());

public Comparator<T> getSortObjectClass() {
    return new SortObjectList();
}
private class SortObjectList implements Comparator<T>
{
    public int compare(T lhs, T rhs) 
    {
        return lhs.name.compareToIgnoreCase(rhs.name);
    }
}

然后我按如下方式覆盖派生类中的排序:

@Override
public Comparator<MyDataClass> getSortObjectClass() {
    return new SortObjectList();
}
private class SortObjectList implements Comparator<MyDataClass>
{
    public int compare(MyDataClasslhs, MyDataClassrhs) 
    {
        return lhs.seqNo - rhs.seqNo;
    }
}

通过seqNo而不是名称来命令。

它有效,但看起来有点笨重。有谁知道更优雅的解决方案?

1 个答案:

答案 0 :(得分:4)

你可以使用匿名内部类使稍微更紧凑:

@Override
public Comparator<MyDataClass> getSortObjectClass() {
    return new Comparator<MyDataClass> {
        @Override
        public int compare(MyDataClass lhs, MyDataClass rhs)  {
            return lhs.seqNo - rhs.seqNo;
        }
    };
}

但这与Java中的一样紧凑。

(请注意,顺便说一句,上面的比较会在溢出时给出错误的结果。)