Нуль нельзя сравнить с двойным - почему? - PullRequest
0 голосов
/ 14 сентября 2018

Насколько я понимаю, следующий код должен работать нормально.

Однако, когда я пытаюсь скомпилировать, он терпит неудачу на compareTo

public class Test {

    Comparable<?> getMinimum() {
        return null;
    }

    public int getPreviousValue(double nv) {
        return getMinimum().compareTo(nv);
    }
}

Так что мой вопрос, почему компиляция в случае неудачи- нам нельзя сравнивать ноль с двойным?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

У вас нет нулевого указателя, у вас есть проблема при вызове compareTo с аргументом double NOT Double!

0 голосов
/ 14 сентября 2018

Компилятор запутывается в Comparable<?>. Сделайте Comparable определенного типа (Double в вашем случае), чтобы компилятор был доволен. :)

public class Test {

    Comparable<Double> getMinimum() {
        return null;
    }

    public int getPreviousValue(double nv) {
        return getMinimum().compareTo(nv);
    }
}
0 голосов
/ 14 сентября 2018

Проблема в том, что не нулевой результат этого метода.

Проблема в том, что компилятор не знает, как вы можете вызвать compareTo(double) для чего-то, что возвращает getMinimum().

Вы должны изменить подпись на Comparable<Double> getMinimum(), чтобы она заработала! Вы можете сравнивать только с определенным типом числа, если ваш Comparable поддерживает это!

Конечно, во время выполнения вы столкнетесь с NPE. И также, конечно: некоторые инструменты проверки кода могут идентифицировать эту конкретную ситуацию NPE уже во время компиляции.

...