Предупреждения нулевого указателя в среде IDE Java - PullRequest
2 голосов
/ 20 января 2010

Существует ли плагин IDE или IDE, который предупредит разработчика о возможном NPE? Например:

Object[] x = getMyObjects();

if (x.length > 0){

   // do my stuff

}

Было бы хорошо, если бы IDE предупреждала, что x не проверяется на возможное нулевое значение. Это сэкономит много инженерных часов ..

Ответы [ 5 ]

6 голосов
/ 20 января 2010

Это то, что FindBugs может обнаружить среди многих других полезных вещей. Также имеется Eclipse-плагин .

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

Возможно, вы захотите начать с добавления плагина FindBugs , чтобы проверять ошибки такого рода (и многие другие) при каждом сохранении. А если вы еще этого не сделали, добавьте плагин CheckStyle : -)

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

NullPointerExceptions - это ошибки программирования по своей природе.

Что вы можете сделать, если данный массив равен нулю? А. пропустите проверку. Лучшая альтернатива - вернуть пустой массив:

public Object [] getMyObjects() {
     /// do a lot of stuff 

    if( nothingToReturn() ){
        return new Object[0];
     } else {
         return nonNullArray;
     }
}

So

if( x.length > 0 ) 

Никогда не бросает Npe на первое место.

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

Вот почему " инкапсуляция " является таким важным понятием в ООП (так что другие объекты не аннулируют ваши данные).

Я думаю, что было бы справедливо проверить, возвращают ли внешние классы ноль или нет (что, кстати, должно быть хорошо задокументировано), но для внутренних методов реальная проблема заключается в том, что собственный объект не знает состояния своих переменных экземпляра .

ПРИМЕЧАНИЕ Это было слишком много для комментария, поэтому я вместо этого предоставил ответ CW.

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

Eclipse 3.5 (и AFAIR 3.4 тоже) имеет две опции компилятора для указателей Null.

Вы можете найти их в Window -> Preferences -> Java -> Compiler -> Error/Warnings -> Potential programming problems.

Мои предпочтительные настройки Error для Null pointer access (это определенно повышающие исключения) и Warning для Potential null pointer access.

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

в дополнение к ответу Джона ...


Eclipse 3.4 дал мне отличное сообщение, похожее на:

В этой точке переменная может быть только нулевой.

Сначала я не мог в это поверить, но это было правдой. Было два выражения вроде:

if ((var == null) && (var.getProperty().equals("")) {

if ((var != null) || (var..getProperty().equals("")) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...