[英]Easiest way to check if property is null or empty in java
我有一个方法可以检查Account的某些属性(不是全部),并且如果这些属性中的任何一个为null或为空,它都将返回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对象的所有属性的条件。 如何才能更优雅地做到这一点?
编写一个方法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 */;
我认为这样做比做涉及构造流或列表的操作更可取,因为它很简单 :它使用了非常基础的语言功能,即使是新手程序员也很容易理解。
另外,它避免评估所有字段(例如,将String... ss
传递给isNullOrEmpty
,然后在数组上执行某些操作),因为它会短路,因为一旦找到第一个null或空值,它将立即停止串。
它还不需要创建任何对象(例如隐式数组或Arrays.asList(...)
的List
),这些对象仅仅是调用方法的伪像: trim()
确实可以创建对象,但这在评估病情的必要范围内,这是“有用的”工作。
这似乎是标准Java Bean验证框架JSR 380的经典用例。
它允许您将@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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.