Лучший способ проверить нулевые значения в Java? [закрыто]

У меня была эта точная проблема, она была вызвана литералом массива 20 элементов. Пришлось переключиться на другой синтаксис. Довольно глупо.

29
задан Jared Nielsen 26 June 2013 в 21:07
поделиться

16 ответов

Метод 4 является лучшим.

if(foo != null && foo.bar()) {
   someStuff();
}

будет использовать оценку короткого замыкания , что означает, что оно заканчивается, если первое условие logical AND ложно.

59
ответ дан Jared Nielsen 26 June 2013 в 21:07
поделиться

Простой однострочный код для проверки на ноль:

namVar == null ? codTdoForNul() : codTdoForFul();
0
ответ дан Sujay U N 26 June 2013 в 21:07
поделиться

Мы можем использовать статический метод Object.requireNonNull класса Object. Реализация ниже

public void someMethod(SomeClass obj) {
    Objects.requireNonNull(obj, "Validation error, obj cannot be null");
}
0
ответ дан Akash Nema 26 June 2013 в 21:07
поделиться

если у вас нет доступа к библиотеке Apache commons, вероятно, будет работать следующее

if(null != foo && foo.bar()) {
//do something
}
0
ответ дан Cyril Deba 26 June 2013 в 21:07
поделиться

Ваше последнее предложение - лучшее.

if (foo != null && foo.bar()) {
    etc...
}

Потому что:

  1. Это легче читать.
  2. Это безопасно: foo.bar () никогда не будет выполняться, если foo == null.
  3. Это предотвращает плохую практику, такую ​​как перехват исключений NullPointerExceptions (в большинстве случаев из-за ошибки в вашем коде)
  4. Он должен выполняться так же быстро или даже быстрее, чем другие методы (хотя я думаю, что это должно почти невозможно это заметить).
0
ответ дан C.Champagne 26 June 2013 в 21:07
поделиться

Вы также можете использовать StringUtils.isNoneEmpty("") для проверки, является нулевым или пустым.

1
ответ дан Durgpal Singh 26 June 2013 в 21:07
поделиться

Если вообще вы собираетесь проверять с двойным равным «==», тогда проверяйте нуль с помощью объекта ref, например,

if(null == obj) 

вместо

if(obj == null)

, потому что если вы неправильно набрали одинаковое равное if (obj = null) вернет true (присвоение объекта возвращает успех (значение true).

1
ответ дан user3107979 26 June 2013 в 21:07
поделиться

Если вы управляете вызываемым API, рассмотрите возможность использования необязательного класса Guava

Подробнее здесь . Измените свой метод, чтобы он возвращал Optional<Boolean> вместо Boolean.

Это сообщает вызывающему коду, что он должен учитывать возможность нулевого значения, вызывая один из удобных методов в Optional

1
ответ дан Sam Barnum 26 June 2013 в 21:07
поделиться

Я бы сказал, что метод 4 является наиболее общей идиомой из кода, который я рассмотрел. Но это всегда кажется мне немного вонючим. Предполагается, что foo == null совпадает с foo.bar () == false.

Это не всегда кажется мне правильным.

2
ответ дан DaveH 26 June 2013 в 21:07
поделиться

Метод 4, безусловно, лучший, поскольку он четко указывает, что произойдет, и использует минимум кода.

Метод 3 просто неправильный на каждом уровне. Вы знаете, что предмет может быть нулевым, поэтому это не исключительная ситуация, это то, что вы должны проверить.

Метод 2 только делает его более сложным, чем нужно.

Метод 1 - это просто метод 4 с дополнительной строкой кода.

4
ответ дан wobblycogs 26 June 2013 в 21:07
поделиться

Как уже говорили другие, # 4 - лучший метод, когда не используется библиотечный метод. Тем не менее, вы всегда должны ставить null в левой части сравнения, чтобы случайно не назначить null для foo в случае опечатки. В этом случае компилятор поймает ошибку.

// You meant to do this
if(foo != null){

// But you made a typo like this which will always evaluate to true
if(foo = null)

// Do the comparison in this way
if(null != foo)

// So if you make the mistake in this way the compiler will catch it
if(null = foo){

// obviously the typo is less obvious when doing an equality comparison but it's a good habit either way
if(foo == null){
if(foo =  null){
1
ответ дан Jay Eskandarian 26 June 2013 в 21:07
поделиться

В Java 8 лучший способ проверки на нулевое значение:

Objects.isNull(obj) //returns true if the object is null

Objects.nonNull(obj) //returns true if object is not-null

if(Objects.nonNull(foo) && foo.something()) // Uses short-circuit as well. No Null-pointer Exceptions are thrown.

Помимо этого ... Вы также можете использовать опциональный класс Guava

Сокращает типологические ошибки, такие как (obj=null), который всегда возвращает true, как обсуждалось в предыдущих ответах.

7
ответ дан Vasily Kabunov 26 June 2013 в 21:07
поделиться

Метод 4 - мой предпочтительный метод. Короткое замыкание & amp; & amp; Оператор делает код наиболее читабельным. Метод 3, Catching NullPointerException, не одобряется в большинстве случаев, когда достаточно простой нулевой проверки.

2
ответ дан aglassman 26 June 2013 в 21:07
поделиться
  • Не ловить NullPointerException. Это плохая практика. Лучше убедиться, что значение не равно нулю.
  • Метод № 4 будет работать для вас. Он не будет оценивать второе условие, потому что Java имеет короткое замыкание (то есть последующие условия не будут оцениваться, если они не изменяют конечный результат логического выражения). В этом случае, если первое выражение логического И оценивается как ложное, последующие выражения не нужно оценивать.
5
ответ дан Vivin Paliath 26 June 2013 в 21:07
поделиться

Последний и лучший. т.е. ЛОГИЧЕСКОЕ И

  if (foo != null && foo.bar()) {
    etc...
}

Поскольку в логическом &&

нет необходимости знать, что такое правая часть, результат должен быть false

Предпочитают читать: Короткое замыкание логического оператора Java

11
ответ дан Community 26 June 2013 в 21:07
поделиться

В Java 7 вы можете использовать Objects.requireNonNull(). Добавьте импорт класса Objects из java.util.

public class FooClass {
    //...
    public void acceptFoo(Foo obj) {
        //If obj is null, NPE is thrown
        Objects.requireNonNull(obj).bar(); //or better requireNonNull(obj, "obj is null");
    }
    //...
}
2
ответ дан KrishPrabakar 26 June 2013 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: