Метод Java CompareTo заявляет, что я не могу преобразовать int в логическое значение, хотя ни один из них не используется

public int compareTo(Person p) {
    int res = 1;
    String personStr = p.getId();
    String thisId = this.getId();

    if(thisId.equals(personStr)){
        res = 0;
    }
    else if(thisId.compareTo(personStr)){
        res = -1;
    }

    return res;
}

Я реализовал довольно простой метод compareTo, но не получаю сообщения об ошибке. Условие в else if statemint дает мне сообщение о том, что оно не может преобразовать из int в boolean. Я понимаю, но дело в том, что я использую netiher. Я просто хочу сравнить 2 простые строки, почему это происходит?


person Essej    schedule 21.01.2016    source источник


Ответы (3)


Что вы должны заметить, так это то, что интерфейс «compareTo» возвращает int «public int compareTo», являющийся знаком

операторы if полагаются на логическое значение, однако вы используете thisId.compareTo(personStr), который будет возвращать целое число, как и метод, который вы создаете.

Ваш первый оператор if в порядке — «равно» возвращает логическое значение. Однако второй этого не делает, он, скорее всего, вернет либо -1, либо 0, либо 1.

person William Dunne    schedule 21.01.2016
comment
А, теперь я понял... *хлопок ладонями. Был долгий день. Я просто установил thisId.compareTo(personStr) == -1){... и все заработало. - person Essej; 21.01.2016
comment
Они есть у всех, не переживайте. - person William Dunne; 21.01.2016
comment
@Baxtex было бы лучше использовать thisId.compareTo(personStr) < 0 - теоретически compareTo может возвращать что-то другое, чем -1, 0 или 1 - например, -5. - person assylias; 21.01.2016

но дело в том, что я использую netiher

Вы уверены, что?

Это приводит к int:

thisId.compareTo(personStr)

Но вы используете его как Boolean:

if (yourResult)

Для оператора if требуется логическое значение, его нельзя просто использовать для любого значения. Например, рассмотрим разницу между этим:

if (value == 1)

и это:

if (value)

В некоторых языках вам это сойдет с рук. Некоторые языки присваивают степени «правдивости» всем типам, что позволяет использовать их в логических выражениях. Ява не входит в их число. Вы должны явно определить свою логическую логику в Java:

if(thisId.compareTo(personStr) > 0) // or whatever your logic should be
person David    schedule 21.01.2016

если вы просто хотите сравнить эти 2 строки, почему бы не использовать

public int compareTo(Person p) {
  String personStr = p.getId();
  String thisId = this.getId();
  return thisId.compareTo(personStr);
}
person Kai Iskratsch    schedule 21.01.2016