我可以简化一个Spring比较器吗?

时间:2017-10-10 05:51:08

标签: java spring

我在org.springframework.core.OrderComparator

中找到了此源代码
private int doCompare(Object o1, Object o2, OrderSourceProvider sourceProvider) {
    boolean p1 = (o1 instanceof PriorityOrdered);
    boolean p2 = (o2 instanceof PriorityOrdered);
    if (p1 && !p2) {
        return -1;
    }
    else if (p2 && !p1) {
        return 1;
    }

    // Direct evaluation instead of Integer.compareTo to avoid unnecessary object creation.
    int i1 = getOrder(o1, sourceProvider);
    int i2 = getOrder(o2, sourceProvider);
    return (i1 < i2) ? -1 : (i1 > i2) ? 1 : 0;
}

我认为return (i1 < i2) ? -1 : (i1 > i2) ? 1 : 0;可以简化为:

return i1 - i2;

我是对的吗?

版本:
春季4.3.11。
Java 1.8。

2 个答案:

答案 0 :(得分:0)

我想我得到了答案:i1 - i2可能会溢出。

public void testCompare() {
    int i1 = -2000000000;
    int i2 = 2000000000;
    System.out.println(i1 - i2);
}

输出为:294967296

似乎有点愚蠢。但是,不管......

答案 1 :(得分:-4)

你错了。

比较器应返回零或一或减一。 i1减去i2的结果可能是零或1以外的其他结果。

它可以是十,减六任何有效的int。

getOrder的javadoc没有提及它的返回值。

getOrder的代码

Object[] sources = ObjectUtils.toObjectArray(orderSource);
                    for (Object source : sources) {
                        order = findOrder(source);
                        if (order != null) {
                            break;
                        }
                    }