Java Comparable Interface compareTo метод

Не виждам нищо, което да правя грешно, но NetBeans ми дава следната грешка:

incomparable types
required: boolean
found: java.lang.Object


public int compareTo(Object obj)  {
    if( obj instaceof Employee){
       Employee employee = (Employee) obj;
       if(this.weekly_earnings > employee.weekly_earnings)
           return 1;
       else if(this.weekly_earnings == employee.weekly_earnings)
           return 0;
       else
           return -1;
    }
    else{
        System.out.println("Error");
    }
}

person user69514    schedule 05.03.2010    source източник
comment
И не връща нищо от случая на грешка (трябва да хвърли ClassCastException, всъщност трябва да използва генерични).   -  person Tom Hawtin - tackline    schedule 05.03.2010
comment
Бих искал също да добавя, че вероятно би било по-добре, ако току-що се върнахте (this.weekly_earnings - employee.weekly_earnings), спестявайки всички оператори if.   -  person DaveJohnston    schedule 05.03.2010


Отговори (1)


Изписва се instanceof.

Освен това, както Том Хотин спомена в коментар, ако използвате Java 1.5 или по-нова версия, можете да напишете compareTo(Employee emp), за да избегнете изобщо използването на instanceof. Има подробен раздел за писане на сравними типове в Подреждане на обекти урок по Java.

person Bill the Lizard    schedule 05.03.2010
comment
Това няма ли да даде синтактична грешка? Опитайте чисто изграждане или рестартирайте netbeans. - person Pindatjuh; 05.03.2010
comment
@Pindatjuh: Това наистина дава несравними типове на синтактичната грешка... - person Bill the Lizard; 05.03.2010
comment
Не се чувствай зле. Нямаше да го получа толкова бързо, ако не го бях направил преди. :) И както Pindatjuh посочва, това дори не е съобщението за грешка, което бихте очаквали от тази печатна грешка. - person Bill the Lizard; 05.03.2010
comment
Това е трикът, благодаря: прилага Comparable‹Name› =› compareTo(Name n) и няма нужда от instanceOf - person Leos Literak; 08.09.2020