比较方法违反了一般合同

时间:2015-12-27 14:40:40

标签: java android comparator

我试图使用下面的比较器而且我很少但始终如一地得到错误的比较方法违反了一般合同"。我已多次尝试调试它,但从未找到根本原因 - 这里有明显的问题吗?

Collections.sort(ArrayListOfMyObjects, new Comparator<MyObject>() {

        public int compare(MyObject lhs, MyObject rhs) {
    
    

            boolean lhsBool = lhs.getBooleanValueOfVariable;
    

            boolean rhsBool = rhs.getBooleanValueOfVariable;
    
    

            if (lhsBool && !rhsBool) {
    

                return -1;
    

            } else if (!lhsBool && rhsBool) {
    

                return 1;
    
    

            }
            // objects have no booleans defined

            else {
    
    

                if (appGpsLocation == null) {
    
    

                    String lhsString = lhs.getStringValueOfVariable();
    

                    String rhsString = rhs.getStringValueOfVariable();
    
    

                    return lhsString.compareTo(rhsString);
    

                } else {
    
    

                    float lhsFloat = lhs.getFloatValueOfVariable();

                    float rhsFloat = rhs.getFloatValueOfVariable();
    
    

                    int result = Float.compare(lhsFloat, rhsFloat);
    
    

                    return result;
    
                }
    
            }
    
        }
});

编辑:

•(!useStrings)转换为 - &gt; (appHasGpsLocation == null)

•对象方法名称更改为与java方法更加不同

1 个答案:

答案 0 :(得分:1)

假设appGpsLocation期间sort没有变化,那么该方法会维持合同。但是如果在appGpsLocation期间sort 更改,则可能不会,因为它突然使用不同的信息来确定对象的关系,因此它&# 39;如果a.compare(b)b.compare(a)之间发生appGpsLocation更改,angular.module('ciscoImaDashboarAdmin') .controller('minisCtrl', function ($scope) { }); ID3_sync_safe_to_int可能会进行网格化。