В чем смысл примечаний здесь? - PullRequest
0 голосов
/ 14 апреля 2019

Я изучаю исходный код AbstractQueuedSynchronizer JDK8, и я не знаю цели 'проверки на ноль' здесь:

/**
 * Returns previous node, or throws NullPointerException if null.
 * Use when predecessor cannot be null.  The null check could
 * be elided, but is present to help the VM.
 *
 * @return the predecessor of this node
 */
final Node predecessor() throws NullPointerException {
    Node p = prev;
    if (p == null)
        throw new NullPointerException();
    else
        return p;
}

В примечаниях говорится, что проверка на ноль может быть исключена, но присутствует, чтобы помочь ВМ - почему?В чем выгода для ВМ?

1 Ответ

0 голосов
/ 14 апреля 2019

С точки зрения дизайна, когда вы пишете API, хорошо передать ответственность за обработку неопределенного поведения пользователю, а не пытаться обрабатывать его самостоятельно.

В комментариях говоритсячто вы должны использовать predecessor() только тогда, когда это не может быть null, поэтому он проверяет, чтобы убедиться, что это не null - но если это так, то поведение не определено, и вы должны уведомить пользователя.

Может быть, есть что-то особенное для JVM, для которого это полезно, но кто-то с лучшим знанием этого должен будет поговорить об этом.

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