IsTrue: примеры (JAVA)
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 значение нулю и пустым строкам даётся ложная семантика, проверка типов часто важнее.
print(bool(True))
print(bool(None))
print(True is True)
True False True
В Python есть оператор is для идентичности и bool() для булевой интерпретации.
var_dump((bool) true);
var_dump((bool) 0);
var_dump(null === true);
bool(true) bool(false) bool(false)
bool? b = null;
Console.WriteLine(b == true);
Console.WriteLine(b.GetValueOrDefault(false));
False False
В C# nullable булевы величины сравниваются напрямую с true безопасно.
-- В SQL проверка может требовать явного сравнения
SELECT CASE WHEN bool_col = TRUE THEN 'yes' ELSE 'no' END FROM table;
(зависит от данных в таблице)
val b: Boolean? = null
println(b == true) // false
println(b ?: false) // безопасное значение по умолчанию
false false
// В Go нет nullable bool в стандартном виде
var b bool = true
fmt.Println(b) // true
true
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. Фильтрация потоков с упакованными булевыми значениями
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. Обёртка с дефолтным значением
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
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. Использование в тестах
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. Кастомная безопасная проверка с логированием
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
Пояснение: полезно для отладки, когда требуется логировать нежелательные состояния, не бросая исключение.