Сопоставимый и (MyClass) null

Скажи, что у меня есть

public class MyClass 
     implements Comparable<MyClass>
{
    public int compareTo(MyClass mc)
    {
        //<implementation ommited>...
    }
}

В документации для Comparable говорится, что «естественный порядок для класса C считается совместимым с equals тогда и только тогда, когда e1.compareTo (e2) == 0 имеет то же логическое значение, что и e1.equals (e2) для каждого e1 и e2 класса C. Обратите внимание, что null не является экземпляром какого-либо класса, и e.compareTo (null) должен вызывать исключение NullPointerException, даже если e.equals (null) возвращает false. "

он говорит, что «e.compareTo (null) должен вызывать исключение NullPointerException».

Должен ли он генерировать исключение NullPointerException также при выполнении e.compareTo((MyClass)null)?


person Developer Marius Žilėnas    schedule 18.05.2015    source источник
comment
Да, это все еще нулевое значение. Вам не нужно часто приводить к нулю; это было бы только там, где был перегруженный метод. Небольшое различие далее описано здесь: stackoverflow.com/questions/315846/why-null-cast.   -  person Luke    schedule 18.05.2015


Ответы (2)


Да, он должен выбросить исключение NullPointerException.

null - это null во время выполнения, независимо от того, какой тип вы укажете во время компиляции.

В вашем коде нет возможности определить, позвонили ли вы e.compareTo((MyClass)null) или e.compareTo(null). Это то же самое.

person Thilo    schedule 18.05.2015

Какая разница, если вы напишете e.compareTo(null) или e.compareTo((MyClass)null)?

Оба кода - это один и тот же код, что и null is null. Even if you cast it to any type, it will be null only.

person Naman Gala    schedule 18.05.2015
comment
null можно привести к всем типам. - person Thilo; 18.05.2015