Сравнение String и Integer с использованием compareTo и instanceOf - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть фрагмент кода, который я не могу понять, что именно он делает .. Этот код находится на JavaBean ..

private Object myNumb;

//then getter and setter for this

public int compareTo(myRptObj o){

        if (myNumb instanceof String && o.myNumb instanceof Integer) {
          return_value =  1;
        } else if (myNumb instanceof Integer && o.myNumb instanceof String) {
          return_value = -1;
        } else if (myNumb instanceof String && o.myNumb instanceof String) {
          return_value = ((String) myNumb).compareTo((String)o.myNumb);
        } else if (myNumb instanceof Integer && o.myNumb instanceof Integer) {
          return_value = ((Integer) myNumb).compareTo((Integer)o.myNumb);
        }

}

Хочу понять compareTo а как проводится сравнение для String и Integer? myNumb может быть типа Integer или String.

Ответы [ 4 ]

1 голос
/ 21 сентября 2011

первые два предложения if гарантируют, что строки считаются больше целых.Вторые два предложения if делегируют сравнение между строками и целыми числами реализации compareTo() этих классов, так что они упорядочены как обычно.

Обратите внимание, что это очень, очень плохой дизайн иметь такой код, где переменная может быть «типа X или Y» - именно потому, что она вынуждает вас писать такой код.

Вместо этого выберите один тип и преобразуйте его в / из этого типа.где необходимо.

1 голос
/ 21 сентября 2011

Фрагмент удостоверяется, что любой Integer сравнивает меньше чем любой String.

Integer - Integer и String - String сравнения выполняются так, как вы ожидаете.

0 голосов
/ 21 сентября 2011

Поскольку myNumb может быть либо String , либо Integer , compareTo проверяет, какие типы они являются первыми. Если они не одного типа (один из них Integer , а другой - String ), они не равны и поэтому возвращают 1 или -1 в зависимости от ситуации. Если они относятся к одному типу, он приводит их к этому типу и делегирует его типу сравнения.

0 голосов
/ 21 сентября 2011

... что именно он делает.

В основном: строки больше целых, если оба типа имеют одинаковый тип, используйте их естественное упорядочение (сравните 2 строки или 2 целых).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...