Есть ли в java 8+ хорошая проверка полей, которая может заменить предварительные условия для guava? - PullRequest
3 голосов
/ 24 марта 2019

Я хочу добавить проверки полей в методе в моем приложении (например, поле не является нулевым и положительным).

private void assertionTest(Integer i) {
    // want to first assert here that i is not null and positive 
    // something like: 
    // Preconditions.checkArgument( i != null && i > 0, "i should be non null positive number!" );
    // 
    System.out.println( "i: " + i);
}

Java 8 представляет класс Objects, который имеет несколько основных служебных методов для проверки нулевой проверки:

public static <T> T requireNonNull(T obj)
public static <T> T requireNonNull(T obj, String message)

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

checkArgument(boolean) throws IllegalArgumentException
checkState(boolean) throws IllegalStateException
etc.

Есть ли какая-нибудь лучшая альтернатива в Java 8+ для проверки полей, такчто мне не нужно включать внешние библиотеки, такие как гуава для этого?

Ответы [ 4 ]

2 голосов
/ 24 марта 2019

Java 8 + (до 12) не имеет такого подхода (возможно, в будущем появятся некоторые изменения).

  • Со стороны чистой Java вы можете использовать assert :

    assert <condition> : <message>
    

В случае неудачи утверждения AssertionError выдается с <message>.

Однако вы должны быть уверены, что он активируется добавлением атрибута -ea в JVM .
Утверждения добавляют более значимую информацию для неудачных дел.

  • В качестве альтернативы вы можете использовать apache-commons-lang Validate class:

    Validate.notNull(i, "this parameter can't be null")
    Validate.isTrue(i > 0, "The value must be greater than zero: %d", i);
    
0 голосов
/ 24 марта 2019

Я использую проверки пружины, но иногда я пишу проверки, расширяя проверки пружины для управления некоторым пользовательским поведением

0 голосов
/ 24 марта 2019

Я думаю, вы можете использовать Apache Commons Lang для этого.У них есть много методов проверки в Validate class .Я не уверен, достаточно ли он выразителен, но если вам нужно что-то еще, то можно просто написать это для себя, кода для простых проверок не должно быть много.

Кроме того, если вы когда-нибудь захотите интегрироватьэти проверки в вашем основном коде бизнес-логики (не только модульные тесты), вы должны взглянуть на Bean Validation .Таким образом, вы определенно не изобретаете колесо, и ваши тесты будут ожидать только исключения из среды валидации.

Приветствия.

0 голосов
/ 24 марта 2019

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

Имейте в виду, что большинство этих методов просто просты, если условия с выразительным именем!

А затем есть JSR 380 a.k.a «Проверка бобов». Это позволяет вам определять ограничения проверки, используя аннотации:

void assertionTest (@NotNull @PositiveOrZero Integer i) { ... }

BV имеет несколько преимуществ для больших приложений:

  • Меньше беспорядка, вы можете определить ограничения в одном месте
  • Много полезных предопределенных ограничений
  • Пользовательские аннотации
  • Локализованные сообщения об ошибках (которые можно легко настроить)
  • Проверка для сложных объектов и графов объектов с учетом производительности
  • Проверка с учетом контекста
  • интеграция с другими библиотеками и фреймворками
  • и многое другое

Ознакомьтесь с документацией эталонной реализации

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