Самый простой способ проверить, является ли свойство нулевым или пустым в Java - PullRequest
0 голосов
/ 10 мая 2019

У меня есть метод, который проверяет некоторые свойства (не все) учетной записи, и если какое-либо из этих свойств является нулевым или пустым, оно возвращает значение true, мне нужен элегантный способ сделать это без необходимости писать так много условных операторов.

private boolean isInvalidSlateAccount(Account account) {

    return (account.getAccesskeyid() == null || account.getAccesskeyid().trim().isEmpty()
            || account.getAccount() == null || account.getAccount().trim().isEmpty()
            || account.getAwsregion() == null || account.getAwsregion().trim().isEmpty()
            || account.getGatewayname() == null || account.getGatewayname().trim().isEmpty()
            || account.getGatewaytype() == null || account.getGatewaytype().trim().isEmpty()
            || account.getSecretaccesskey() == null || account.getSecretaccesskey().trim().isEmpty()
            || account.getTenant() == null || account.getTenant().trim().isEmpty() || account.getZone() == null || account
            .getZone().trim().isEmpty());

}

Я сделал это

private boolean isInvalidSlateAccount(Account account) {
    List<String> properties = Arrays.asList(
        account.getAccesskeyid(),
        account.getAccount(),
        account.getAwsregion(),
        account.getGatewayname(),
        account.getGatewaytype(),
        account.getSecretaccesskey(),
        account.getTenant(),
        account.getZone()
    );
    return properties.stream()
        .anyMatch(s -> (s == null || s.trim().isEmpty()));

}

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

Ответы [ 2 ]

4 голосов
/ 10 мая 2019

Напишите метод isNullOrEmpty(String):

static boolean isNullOrEmpty(String s) {
  return s == null || s.trim().isEmpty()
  // Or return s == null || s.isBlank(); in Java 11+
}

Таким образом, вы можете написать:

return isNullOrEmpty(account.getAccesskeyid())
    || isNullOrEmpty(account.getAccount())
    /* etc */;

Я считаю, что это предпочтительнее, чем делать что-то, включающее создание потоков или списков, потому что это просто simple : он использует очень простые языковые функции, которые легко понять даже начинающему программисту.

Кроме того, он избегает оценки всех полей (например, передает String... ss в isNullOrEmptyи затем что-то делает с массивом), поскольку он закорачивается, то есть останавливается, как только находит первую нулевую или пустую строку.

Это также не требует создания каких-либо объектов (например,неявный массив, или List в случае Arrays.asList(...)), которые являются просто артефактами вызова метода: trim() потенциально создает объекты, но это «полезная» работа, поскольку это необходимо для оценки условия.

0 голосов
/ 10 мая 2019

Это похоже на классический вариант использования для JSR 380 стандартной платформы Java Bean Validation.

Позволяет добавлять @NotNull аннотации к вашим полям в классе Account.Затем вы можете сделать что-то вроде следующего:

@NotNull
private String awsRegion;
Account account = new Account();
account.setAwsRegion(null)

Set<ConstraintViolation<Account>> violations = validator.validate(Account);

Вам потребуется добавить API проверки в качестве зависимости, плюс реализацию валидатора, такую ​​как эталонная реализация Hibernate:

<!-- Java eXtensions for Validation API -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>

<!-- Java eXtensions for Unified Expression Language API -->
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>2.2.4</version>
</dependency>

<!-- Hibernate Validator as implementation of the JSR 349 Bean Validation Specification -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.3.0.Final</version>
</dependency>

Вот ссылка для начала работы:
https://www.baeldung.com/javax-validation

...