FindBugs - избыточное сравнение с нулем - PullRequest
5 голосов
/ 13 июля 2011

У меня ошибка findbugs для приведенного ниже кода,

if( obj instanceof CustomerData )
{
    CustomerData customerData = (CustomerData)obj;

    if (customerData == null) 
    {
        errors.reject("Error", "Null data received");
    }
}

Ошибка Описание:

Избыточная проверка нуля obj, которая, как известно, не является нулевойin (Имя пакета и метода, которое я удалил из-за нарушения безопасности)

Этот метод содержит избыточную проверку известного ненулевого значения по отношению к константе null.

Пожалуйста, дайте мне знать, чтоздесь ошибка.

Ответы [ 3 ]

11 голосов
/ 13 июля 2011

instanceof возвращает false, если аргумент равен null.Так что вам не нужен еще один чек.

3 голосов
/ 13 июля 2011

Я добавил комментарии, встроенные ниже ...

Согласно это , instanceof возвращает false для null экземпляра.

if( obj instanceof CustomerData )
{

    /* To get here, obj must be a non-null instance of CustomerData,
     * so the following cast will always succeed and result in a non-null
     * customerData
     */

    CustomerData customerData = (CustomerData)obj;

    /* customerData cannot be null because of the conditions above, so
     * this check is pointless (it'll never be triggered
     */

    if (customerData == null) 
    {
        /* This line cannot be reached, because of the conditions above */
        errors.reject("Error", "Null data received");
    }
}
1 голос
/ 13 июля 2011

Очевидно, obj не может быть нулевым в контексте этой конкретной проверки.Findbugs может сказать, и предупреждает вас, чтобы удалить избыточную проверку.Если вы не предоставите нам исходный код, где объявлено / определено obj, мы не сможем вам помочь больше.

При этом ошибки / предупреждения Findbugs не обязательно являются проблемой.В этом случае, например, если вы считаете, что проверка может потребоваться в будущем, вы можете просто проигнорировать предупреждение.Распространенный случай может возникнуть во время тестирования, когда вы жестко кодируете входные объекты для проверки конкретного пути кода, но вам все равно нужна нулевая проверка в производстве.

РЕДАКТИРОВАТЬ (после редактирования вопроса):

Ну, null instanceof <Whatever> всегда ложно, поэтому условное выражение instanceof в вашем коде гарантирует, что obj не может быть нулевым.В этом случае вы, вероятно, захотите убрать нулевую проверку - это излишне, и Findbugs преуспел, чтобы указать на это ...

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