Дополнительно
Лучший способ проверки нулевых значений в Java?
Перед вызовом функции объекта мне нужно проверить, не является ли объект нулевым, чтобы избежать выброса NullPointerException
.
Как лучше всего это сделать? Я рассмотрел эти методы.
Какая из практик программирования является лучшей для Java?
// Method 1
if (foo != null) {
if (foo.bar()) {
etc...
}
}
// Method 2
if (foo != null ? foo.bar() : false) {
etc...
}
// Method 3
try {
if (foo.bar()) {
etc...
}
} catch (NullPointerException e) {
}
// Method 4 -- Would this work, or would it still call foo.bar()?
if (foo != null && foo.bar()) {
etc...
}
30
16
Самым лучшим является метод 4..
будет использовать оценку замыкания, что означает, что она завершается, если первое условие
логического И
ложно.Последний и лучший. т.е. ЛОГИЧЕСКИЙ И.
Потому что в логическом
&&&
Предпочтительнее читать :https://stackoverflow.com/questions/8759868/java-logcial-operators-short-circuiting
В Java 8, лучший способ проверить на null:
Помимо этого... вы также можете перейти с гуава's Факультативного класса
Уменьшает типологические ошибки, как
(объект=значение null)
, который всегда возвращаетtrue
, как описано в предыдущих ответах.NullPointerException
. Это плохая практика. Лучше убедиться, что значение не является null.Способ 4 является, несомненно, лучшим, так как он явно указывает, что будет дальше и использует минимум кода.
Способ 3 просто неправильно на каждом уровне. Вы знаете, этот пункт может быть null, поэтому она's не исключительный случай, это'ы, что вы должны проверить.
Способ 2 это просто делает его более сложным, чем он должен быть.
Способ 1-это просто Способ 4 с дополнительной строчки кода.
Я бы сказал, Способ 4 наиболее общие идиомы из кода, что я'вэ посмотрел на. Но это всегда чувствует себя немного вонючий для меня. Предполагается, ФОО == null то же самое как Foo.бар() == ложь.
Это вовсе'т всегда чувствую себя прямо ко мне.
Способ 4-это мой предпочтительный способ. Короткого замыкания && оператор делает код наиболее читабельным. Способ 3, ловя исключение NullPointerException, не одобряется в большинстве случаев, когда простой нуль проверить будет достаточно.
В версии Java 7, Вы можете использовать объекты.requireNonNull()
. Добавьте импорт
объектовот
Ява.утиль.Если вы собираетесь проверить с двойным равных с "==" тогда проверить null с ref объект как
вместо
потому что если вы ошибетесь один равны, если(объект = значение NULL), то она вернет true (назначение объекта возвращает успех (что 'правда' в стоимость).
Если вы контролируете вызываемый API, рассмотрите возможность использования гуава'факультативный класс S
Подробнее здесь. Изменить способ вернуть необязательный<логическое>
вместо
логическое`.Об этом информирует вызывающего кода, что он должен учитывать возможность нуль, позвонив по одному из удобных методов необязательный
Как уже сказал #4-лучший способ, когда не используя метод библиотеки. Однако вы всегда должны поставить нуль в левой части сравнения, чтобы убедиться, что вы Дон'т случайно присвоить значение null переменной foo в случае опечатки. В этом случае компилятор будет ловить ошибку.
Вы также можете использовать StringUtils.isNoneEmpty(" на глаз") для проверки является нулем или пустой.
Мы можем использовать объект.requireNonNull статический метод класса Object. Реализация ниже
Простой одну строку кода, чтобы проверить на null :
если вы не имеете доступ к библиотеке Апач Коммонс, следующий, вероятно, будет работать нормально
Последнее ваше предложение-лучшее.
Потому что: