Перейти к основному содержимому

19 записей с тегом "Java Null"

Посмотреть все теги

· 2 мин. чтения

1. Обзор

В этой быстрой статье мы будем использовать Java 8 Stream API и класс Introspector для вызова всех геттеров, найденных в POJO.

Мы создадим поток геттеров, проверим возвращаемые значения и посмотрим, является ли значение поля нулевым.

2. Настройка

Единственная настройка, которая нам нужна, — это создать простой класс POJO:

· 2 мин. чтения

1. Обзор

В этом кратком руководстве рассказывается, как настроить Jackson для игнорирования нулевых полей при сериализации класса Java.

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

2. Игнорировать нулевые поля в классе

· 6 мин. чтения

1. Введение

На первый взгляд может показаться, что аннотации @NotNull и @Column(nullable = false) служат одной и той же цели и могут использоваться взаимозаменяемо. Однако, как мы вскоре увидим, это не совсем так.

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

В этом кратком руководстве мы сравним ограничения @NotNull и @Column(nullable = false) .

2. Зависимости

· 2 мин. чтения

1. Обзор

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

2. Игнорировать нулевые значения на карте

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

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);

· 4 мин. чтения

1. Обзор

В этом руководстве мы продолжим нашу серию статей о Java 14 , взглянув на Helpful NullPointerException , новую функцию, представленную в этой версии JDK.

2. Традиционные исключения NullPointerException

На практике мы часто видим или пишем код, который связывает методы в Java. Но когда этот код выдает исключение NullPointerException , становится трудно понять, откуда возникает исключение.

Предположим, мы хотим узнать адрес электронной почты сотрудника:

· 3 мин. чтения

1. Обзор

На протяжении многих лет мы применяли множество стратегий, от операторов Элвиса до Optional , чтобы помочь удалить исключения NullPointerException из наших приложений. В этом руководстве мы узнаем о вкладе Uber в разговор, NullAway и о том, как его использовать.

NullAway — это инструмент сборки, который помогает нам устранять исключения NullPointerException (NPE) в нашем коде Java.

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

2. Установка

Давайте посмотрим, как установить NullAway и его зависимости. В этом примере мы собираемся настроить NullAway с помощью Gradle.

NullAway зависит от Error Prone . Поэтому мы добавим ошибочный плагин:

plugins {
id "net.ltgt.errorprone" version "1.1.1"
}

Мы также добавим четыре зависимости в разных областях: annotationProcessor , compileOnly , errorprone и errorproneJavac :

dependencies {
annotationProcessor "com.uber.nullaway:nullaway:0.7.9"
compileOnly "com.google.code.findbugs:jsr305:3.0.2"
errorprone "com.google.errorprone:error_prone_core:2.3.4"
errorproneJavac "com.google.errorprone:javac:9+181-r4173-1"
}

Наконец, мы добавим задачу Gradle, которая настраивает работу NullAway во время компиляции:

import net.ltgt.gradle.errorprone.CheckSeverity

tasks.withType(JavaCompile) {
options.errorprone {
check("NullAway", CheckSeverity.ERROR)
option("NullAway:AnnotatedPackages", "com.foreach")
}
}

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

Кроме того, задача задает проверку пакета на наличие нулевых разыменований.

Вот и все, теперь мы готовы использовать этот инструмент в нашем Java-коде.

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

3. Использование

Допустим, у нас есть класс Person , содержащий атрибут возраста . Кроме того, у нас есть метод getAge , который принимает экземпляр Person в качестве параметра:

Integer getAge(Person person) {
return person.getAge();
}

На данный момент мы видим, что getAge вызовет исключение NullPointerException , если person имеет значение null .

NullAway предполагает, что каждый параметр метода, возвращаемое значение и поле не являются нулевыми. Следовательно, он будет ожидать, что экземпляр person будет ненулевым .

И давайте также скажем, что в нашем коде есть место, которое действительно передает нулевую ссылку в getAge :

Integer yearsToRetirement() {
Person p = null;
// ... p never gets set correctly...
return 65 - getAge(p);
}

Затем запуск сборки приведет к следующей ошибке:

error: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
getAge(p);

Мы можем исправить эту ошибку, добавив аннотацию @Nullable к нашему параметру:

Integer getAge(@Nullable Person person) { 
// ... same as earlier
}

Теперь, когда мы запустим сборку, мы увидим новую ошибку:

error: [NullAway] dereferenced expression person is @Nullable
return person.getAge();
^

Это говорит нам о том, что экземпляр person может быть нулевым . Мы можем исправить это, добавив стандартную нулевую проверку:

Integer getAge(@Nullable Person person) {
if (person != null) {
return person.getAge();
} else {
return 0;
}
}

4. Выводы

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

Как всегда весь исходный код доступен на GitHub .

· 4 мин. чтения

1. Обзор

В этом руководстве мы увидим, как создавать нулевые безопасные потоки из коллекций Java.

Начнем с того, что для полного понимания этого материала требуется некоторое знакомство со справочниками по методам Java 8, лямбда-выражениями, необязательными и потоковыми API.

Если вы не знакомы с какой-либо из этих тем, сначала ознакомьтесь с нашими предыдущими статьями: Новые функции в Java 8 , Руководство по Java 8 (необязательно) и Введение в потоки Java 8 .

2. Зависимость от Maven

· 3 мин. чтения

В этом кратком руководстве показано, как удалить все нулевые элементы из списка с помощью простой Java, Guava, коллекций Apache Commons и более новой поддержки лямбда-выражений Java 8.

Эта статья является частью серии « Java — Back to Basic » здесь, на ForEach.

1. Удалите нули из списка , используя обычную Java

Java Collections Framework предлагает простое решение для удаления всех нулевых элементов в списке — базовый цикл while :

@Test
public void givenListContainsNulls_whenRemovingNullsWithPlainJava_thenCorrect() {
List<Integer> list = Lists.newArrayList(null, 1, null);
while (list.remove(null));

assertThat(list, hasSize(1));
}

В качестве альтернативы мы также можем использовать следующий простой подход:

· 4 мин. чтения

1. Обзор

Начиная с Spring 5 у нас теперь есть доступ к интересной функции, помогающей нам писать более безопасный код. Эта функция называется нулевой безопасностью, группа аннотаций работает как защита, которая следит за потенциальными нулевыми ссылками.

Вместо того, чтобы позволить нам работать с небезопасным кодом, функция нулевой безопасности выдает предупреждения во время компиляции. Такие предупреждения могут предотвратить катастрофические исключения нулевого указателя (NPE) во время выполнения.

2. Аннотация @NonNull

Аннотация @NonNull является самой важной среди всех аннотаций функции защиты от нулей . Мы можем использовать эту аннотацию, чтобы объявить ненулевое ограничение везде, где ожидается ссылка на объект: поле, параметр метода или возвращаемое значение метода.