Как известно, java.util.Objects
это
Этот класс состоит из статических служебных методов для работы с объектами.
Один из таких методов есть Objects.isNull()
.
Насколько я понимаю, Objects.isNull()
это устранило бы шанс случайного присвоения объекту нулевого значения, пропустив второе =
.
Однако в примечании к API говорится:
Этот метод существует для использования в качестве предиката, фильтра (Objects :: isNull)
Будет ли какая-либо причина / обстоятельство, по которым я должен использовать object == null
овер Objects.isNull()
в выражении if ?
Следует Objects.isNull()
ограничиваться исключительно предикатами?
if(null == variable)
последовательно…variable
этоBoolean
.Ответы:
Если вы посмотрите на исходный код из
IsNull
метода,/* Returns true if the provided reference is null otherwise returns false.*/ public static boolean isNull(Object obj) { return obj == null; }
Это то же самое. Нет никакой разницы. Так что вы можете использовать его безопасно.
источник
== null
вif
, но IsNull велика для использования на лямбда - выражения.Objects.isNull
предназначен для использования с лямбда-фильтрацией Java 8.Намного проще и понятнее написать:
чем писать:
.stream().filter(x -> x == null).
Однако в
if
заявлении будет работать любой из них. Использование,== null
вероятно, легче читать, но, в конце концов, все сводится к предпочтениям стиля.источник
Посмотрите на источник:
public static boolean isNull(Object obj) { return obj == null; }
Чтобы проверить
null
значения, вы можете использовать:Objects.isNull(myObject)
null == myObject // avoids assigning by typo
myObject == null // risk of typo
Тот факт, что
Objects.isNull
он предназначен дляPredicate
s, не мешает вам использовать его, как указано выше.источник
=
вместо==
(не будет компилироваться, если это неBoolean
обертка, допускающая значение NULL , йо, честно)Boolean
обертками с нулевым значением в Java. Это действительно довольно редко (и выдает предупреждения компилятора, когда присваиваниеnull
проверяется, как если бы это было условием), но не невозможно.Да, одна из причин - сделать код простым. Внутри if заявление
object == null
ясно и хорошо известно. Это не может привести к неправильному поведению, если, например, есть опечатка.Если параметр
if (object = null) {}
with пропущен,=
он не будет компилироваться или выдаст предупреждение в случаеBoolean
объекта! На самом деле нет причин использоватьObjects.isNull(object)
overobject == null
внутри оператора if . Вот два варианта бок о бок:if (object == null) { } if (Objects.isNull(object)) { }
Можно сказать, что да, он ограничен исключительно предикатами, хотя нет никаких технических препятствий для использования
Objects.isNull()
везде.Из
public static boolean isNull(Object obj)
javadoc метода:Таким образом, если вы используете метод не как предикат, вы фактически используете более сложное и громоздкое выражение по сравнению с простым
object == null
.Вот отрывок для сравнения преимуществ
Objects.isNull(object)
List<String> list = Arrays.asList("a", "b", null, "c", null); // As ready-made predicate long countNullsWithPredicate = list.stream().filter(Objects::isNull).count(); // Lambda long countNullsWithLambda = list.stream().filter(object -> object == null).count(); // Reimplement the Objects::isNull predicate long countNullsWithAnonymous = list.stream().filter(new Predicate<Object>() { @Override public boolean test(Object obj) { return obj == null; } }).count();
источник
Семантически разницы нет, но для удобства чтения я предпочитаю следующее
whatever == null
:import static java.util.Objects.isNull; // Other stuff... if(isNull(whatever)) { }
источник