почему мой метод сравнения выдает исключение - метод сравнения нарушает его общий договор!

Почему этот код

public class SponsoredComparator implements Comparator<SRE> {

    public boolean equals(SRE arg0, SRE arg1){
        return arg0.getSponsored()==arg1.getSponsored();
    }

    public int compare(SRE object1, SRE object2) {
        Log.d("SponsoredComparator","object1.getName() == "+ object1.getName());
        Log.d("SponsoredComparator","object1.getSponsored() == "+ object1.getSponsored());
        Log.d("SponsoredComparator","object2.getName() == "+ object2.getName());
        Log.d("SponsoredComparator","object2.getSponsored() == "+ object2.getSponsored());
        Log.d("SponsoredComparator","compare return == "+ (object1.getSponsored() && object2.getSponsored() ? 0 : object1.getSponsored() ? -1 : 1));
        return object1.getSponsored() && object2.getSponsored() ? 0 : object1.getSponsored() ? -1 : 1;
    }
}

вызывает это исключение: ERROR / AndroidRuntime (244): java.lang.IllegalArgumentException: метод сравнения нарушает общий договор!
ОШИБКА / AndroidRuntime (4446): в java.util.TimSort.mergeLo (TimSort.java:743)

Метод sre.getSponsored () возвращает логическое значение.

Спасибо.

14
задан peakit 7 December 2011 в 14:15
поделиться