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

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

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

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

1. Обзор

При модульном тестировании мы можем иногда захотеть протестировать сообщения, которые мы пишем в стандартный вывод через System.out.println() .

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

В этом кратком руководстве мы рассмотрим несколько способов модульного тестирования System.out.println() с помощью JUnit .

2. Простой метод печати

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

1. Введение

В этом руководстве мы узнаем причину UnknownHostException на примере. Мы также обсудим возможные способы предотвращения и обработки исключения.

2. Когда возникает исключение?

UnknownHostException указывает, что IP-адрес имени хоста не может быть определен. Это может произойти из-за опечатки в имени хоста:

String hostname = "http://locaihost";
URL url = new URL(hostname);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.getResponseCode();

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

1. Введение

В операторах if-else Java мы можем выполнить определенное действие, когда выражение истинно , и альтернативное, когда оно ложно . В этом уроке мы узнаем, как изменить логику с помощью оператора not .

2. Оператор if -else

Начнем с простого оператора if-else :

boolean isValid = true;

if (isValid) {
System.out.println("Valid");
} else {
System.out.println("Invalid");
}

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

1. Обзор

Можно настроить HotSpot JVM с помощью различных флагов настройки. Поскольку существуют сотни таких флагов, отслеживание их и их значений по умолчанию может быть немного сложным.

В этом уроке мы познакомим вас с несколькими способами обнаружения таких флагов настройки и научимся с ними работать.

2. Обзор параметров Java

Команда java поддерживает множество флагов, относящихся к следующим категориям:

· 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. Обзор

В этом руководстве мы сосредоточимся на стандартных параметрах открытия, доступных для файлов в Java.

Мы рассмотрим перечисление StandardOpenOption , которое реализует интерфейс OpenOption и определяет эти стандартные параметры открытия.

2. Параметр OpenOption

В Java мы можем работать с файлами, используя NIO2 API, который содержит несколько служебных методов. Некоторые из этих методов используют необязательный параметр OpenOption , который настраивает способ открытия или создания файла. Кроме того, если этот параметр не задан, он будет иметь значение по умолчанию, которое может быть разным для каждого из этих методов.

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

1. Обзор

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

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

Обратите внимание, что мы будем использовать в примерах тот же класс Person , что и в предыдущей статье .

2. Настройка примитивных полей