Сопоставимый интерфейс Java: обработка нулевых аргументов для CompareTo () - PullRequest
2 голосов
/ 20 января 2012

Написание некоторых классов для расширения Framework, и у меня есть следующий код:

public class TimeImpl implements Time, Comparable<TimeImpl>, Serializable
{
...
    public int compareTo(TimeImpl other)
    {
        if (other == null)
            throw new ClassCastException("null");
        return Long.valueOf(toSeconds()).compareTo(other.toSeconds());
    }
}

Довольно простая реализация, если вы спросите меня.Мой вопрос: насколько я могу судить, javadocs для интерфейса Comparable ничего не говорят о нулевых аргументах.Должен ли я проверить это?Должен ли я изменить тип создаваемого исключения, должен ли я вернуть какое-то другое значение в этом случае?Как другие люди там справляются?

Ответы [ 3 ]

3 голосов
/ 20 января 2012

На самом деле, Comparable интерфейс действительно говорит что-то об обработке null аргументов.

Обратите внимание, что нуль не является экземпляромclass, и e.compareTo (null) должен выдавать исключение NullPointerException, даже если e.equals (null) возвращает false.

3 голосов
/ 20 января 2012

Я предпочитаю бросить NullPointerException, а не ClassCastException.

За этим соглашением также следуют реализации JDK.

1 голос
/ 20 января 2012

Приведенный ниже код представляет собой метод сравнения Integer из java:

 public int compareTo(Integer anotherInteger) 
 {
    int thisVal = this.value;
    int anotherVal = anotherInteger.value;
    return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
 }

почему бы не реализовать свой метод CompareTo так, как это делает Integer.

...