IsTrue: примеры (JAVA)

Примеры использования isTrue
Раздел: Верификация (валидация), Библиотеки
isTrue(boolean expression): void

Общее описание

Термин isTrue в экосистеме Java чаще всего встречается не как стандартный метод в core API, а как имя у утилитных методов в библиотечных классах. Два распространённых варианта:

  • org.springframework.util.Assert.isTrue(boolean expression, String message) - проверка предусловия, бросает IllegalArgumentException, если выражение ложно. Применяется в коде для явной валидации аргументов и инвариантов.
  • org.apache.commons.lang3.BooleanUtils.isTrue(Boolean bool) - безопасная проверка упакованного логического значения: возвращает true только если передано Boolean.TRUE, иначе false. Удобно при работе с Boolean, который может быть null.

Аргументы и возвращаемые значения

  • Assert.isTrue(boolean expression) - аргумент: примитивный boolean; результат: отсутствие возвращаемого значения, при ложном выражении бросается IllegalArgumentException.
  • Assert.isTrue(boolean expression, String message) - тот же смысл, но при выбрасывании исключения будет использовано сообщение message.
  • BooleanUtils.isTrue(Boolean bool) - аргумент: объект Boolean (может быть null); возвращает примитивный boolean: true только когда аргумент равен Boolean.TRUE, иначе false. Не бросает исключений при null.
  • Альтернативные формы (встречаются реже): пользовательские утилиты с сигнатурами вроде isTrue(Boolean b, boolean defaultValue) - возвращают defaultValue, если b == null.

Короткие примеры

Примеры показывают поведение в трёх типичных сценариях.

1. Spring Assert: успешная проверка и исключение при провале

import org.springframework.util.Assert;

public class DemoAssert {
    public static void main(String[] args) {
        Assert.isTrue(2 + 2 == 4, "математика сломана");
        try {
            Assert.isTrue(1 > 2, "условие ложно");
        } catch (IllegalArgumentException e) {
            System.out.println("caught: " + e.getMessage());
        }
    }
}
caught: условие ложно

2. Apache Commons BooleanUtils: разные входы

import org.apache.commons.lang3.BooleanUtils;

public class DemoBooleanUtils {
    public static void main(String[] args) {
        System.out.println(BooleanUtils.isTrue(Boolean.TRUE));
        System.out.println(BooleanUtils.isTrue(Boolean.FALSE));
        System.out.println(BooleanUtils.isTrue(null));
    }
}
true
false
false

3. Сравнение wrapper Boolean: осторожность с equals

public class DemoWrapper {
    public static void main(String[] args) {
        Boolean b = null;
        System.out.println(b == Boolean.TRUE);            // безопасно
        System.out.println(Boolean.TRUE.equals(b));       // безопасно
        // System.out.println(b.equals(Boolean.TRUE));    // NPE если раскомментировать
    }
}
false
false

Похожие функции в Java и особенности

  • Objects.equals(Boolean.TRUE, b) - альтернатива для проверки на истинность у упакованного типа. Безопасно при null, возвращает true только при Boolean.TRUE. Подходит, когда не требуется зависимость от внешних библиотек.
  • Boolean#booleanValue() - преобразование к примитиву, но бросает NullPointerException если значение null. Используется, когда null гарантированно отсутствует.
  • Preconditions.checkArgument (Guava) - схож с Spring Assert по назначению, бросает IllegalArgumentException с форматированным сообщением. Предпочтение зависит от используемой библиотеки и стиля проекта.

Аналоги в других языках и отличия

  • JavaScript
  • // явная проверка истинности
    console.log(Boolean(true));
    console.log(!!0);
    console.log(1 === true);
    true
    false
    false

    В JS значение нулю и пустым строкам даётся ложная семантика, проверка типов часто важнее.

  • Python
  • print(bool(True))
    print(bool(None))
    print(True is True)
    True
    False
    True

    В Python есть оператор is для идентичности и bool() для булевой интерпретации.

  • PHP
  • var_dump((bool) true);
    var_dump((bool) 0);
    var_dump(null === true);
    bool(true)
    bool(false)
    bool(false)
  • C#
  • bool? b = null;
    Console.WriteLine(b == true);
    Console.WriteLine(b.GetValueOrDefault(false));
    False
    False

    В C# nullable булевы величины сравниваются напрямую с true безопасно.

  • SQL
  • -- В SQL проверка может требовать явного сравнения
    SELECT CASE WHEN bool_col = TRUE THEN 'yes' ELSE 'no' END FROM table;
    (зависит от данных в таблице)
  • Kotlin
  • val b: Boolean? = null
    println(b == true) // false
    println(b ?: false) // безопасное значение по умолчанию
    false
    false
  • Go
  • // В Go нет nullable bool в стандартном виде
    var b bool = true
    fmt.Println(b) // true
    true
  • Lua
  • print(true)
    print(nil and true)
    true
    nil

    Краткое отличие от Java: во многих языках булева логика и наличие null/nil различаются; в Java часто приходится учитывать упакованные типы Boolean и их безопасность при сравнении.

Типичные ошибки

  • Ожидание возврата boolean у Spring Assert. Assert.isTrue не возвращает значение, а бросает исключение при ложном условии. Пример ошибки:
// Неправильно: попытка использовать возвращаемое значение
boolean ok = Assert.isTrue(x > 0); // не скомпилируется
Ошибка компиляции: несоответствие типов, метод не возвращает значение
  • NullPointerException при вызове equals на null. Вызов b.equals(Boolean.TRUE) при b == null приведёт к NPE. Правильнее использовать Boolean.TRUE.equals(b) или BooleanUtils.isTrue(b).
  • Сравнение ссылок вместо значений. Использование == для сравнения объектов Boolean в редких случаях может вести к неожиданным результатам при автозавёртывании; для проверки значения лучше использовать Boolean.TRUE.equals(b) или преобразовать в примитив.
  • Использование Assert в продакшн-логике. Assert предназначен для проверки предусловий и входных данных, но не для контроля бизнес-логики, где предпочтительнее явная обработка ошибок вместо исключений при предполагаемых сценариях.

Изменения в последних версиях

В core JDK метод с именем isTrue не является частью стандартной библиотеки, поэтому изменений в самом Java нет. Библиотеки, где встречается этот метод, эволюционировали так:

  • Spring Framework: сигнатура Assert.isTrue стабильна в пределах последних релизов, поведение и бросаемое исключение не изменялись.
  • Apache Commons Lang: BooleanUtils.isTrue также сохраняет обратную совместимость; изменения в релизах обычно касаются других утилит, а не базовой логики проверки трёх состояний.

Для конкретики по версиям рекомендуется смотреть changelog соответствующей библиотеки.

Расширенные примеры и нестандартные сценарии

1. Фильтрация потоков с упакованными булевыми значениями

Пример java
import org.apache.commons.lang3.BooleanUtils;
import java.util.Arrays;
import java.util.List;

public class StreamFilter {
    public static void main(String[] args) {
        List list = Arrays.asList(true, null, false, Boolean.TRUE);
        list.stream()
            .filter(BooleanUtils::isTrue)
            .forEach(System.out::println);
    }
}
true
true

Пояснение: фильтр оставляет только элементы, равные Boolean.TRUE, безопасно обходит null.

2. Обёртка с дефолтным значением

Пример java
public class Utils {
    public static boolean isTrueOrDefault(Boolean b, boolean def) {
        return b != null ? b : def;
    }

    public static void main(String[] args) {
        System.out.println(isTrueOrDefault(null, true));
        System.out.println(isTrueOrDefault(Boolean.FALSE, true));
    }
}
true
false

Пояснение: полезно для конфигураций, где null означает использовать значение по умолчанию.

3. Интеграция с Optional

Пример java
import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        Optional opt = Optional.ofNullable(null);
        boolean result = opt.orElse(false);
        System.out.println(result);
    }
}
false

Пояснение: использование Optional для безопасного получения примитивного булева значения.

4. Использование в тестах

Пример java
import static org.junit.Assert.assertTrue;

public class TestExample {
    @org.junit.Test
    public void testCondition() {
        boolean condition = compute();
        assertTrue("Ожидалось true", condition);
    }

    private boolean compute() { return 5 > 2; }
}
(тест пройдёт успешно)

Пояснение: в тестах применяются утверждения библиотеки тестирования, а не утилиты isTrue, однако концепция проверки истинности та же.

5. Кастомная безопасная проверка с логированием

Пример java
public class SafeCheck {
    public static boolean isTrueLogged(Boolean b) {
        boolean res = Boolean.TRUE.equals(b);
        if (!res) {
            System.out.println("Значение не true: " + b);
        }
        return res;
    }

    public static void main(String[] args) {
        isTrueLogged(null);
        isTrueLogged(false);
        isTrueLogged(true);
    }
}
Значение не true: null
Значение не true: false

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

джава isTrue function comments

En
IsTrue Validates that the argument condition is true