sau*_*.in 8 java validation java-8
我想在我的应用程序的方法中添加字段验证(例如,字段不为null和正数)。
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);
}
Run Code Online (Sandbox Code Playgroud)
Java 8引入了Objects类,该类具有一些用于null检查验证的基本实用程序方法:
public static <T> T requireNonNull(T obj)
public static <T> T requireNonNull(T obj, String message)
Run Code Online (Sandbox Code Playgroud)
但是它仍然缺少番石榴的Preconditions类提供的详尽的验证列表,如下所示:
checkArgument(boolean) throws IllegalArgumentException
checkState(boolean) throws IllegalStateException
etc.
Run Code Online (Sandbox Code Playgroud)
Java 8+中是否有任何更好的方法可以进行字段验证,这样我就不必包括guava这样的外部库了?
Java 8+(至12)没有这种方法(将来可能会出现一些变化)。
从纯Java方面,您可以使用assert:
assert <condition> : <message>
Run Code Online (Sandbox Code Playgroud)如果断言失败,AssertionError
则抛出<message>
。
但是,您应该确保通过将-ea
属性添加到JVM来激活它。
断言为失败的案例添加了更多有意义的信息。
但是,断言的目的不是检查方法参数。因此,请看第二种方法。
或者,您可以使用apache-commons-lang
Validate类:
Validate.notNull(i, "this parameter can't be null")
Validate.isTrue(i > 0, "The value must be greater than zero: %d", i);
Run Code Online (Sandbox Code Playgroud)这种方法对于验证方法的参数更为可取。
如果您更喜欢验证方法,为什么不自己编写它们呢?很多人都这样做。它简单、快速并且不需要任何外部依赖。
请记住,这些方法中的大多数只是简单的 if 条件,并且具有富有表现力的名称!
然后是 JSR 380 又名“Bean 验证”。它允许您使用注释定义验证约束:
void assertionTest (@NotNull @PositiveOrZero Integer i) { ... }
Run Code Online (Sandbox Code Playgroud)
BV 对于大型应用有几个好处:
查看参考实现的文档
归档时间: |
|
查看次数: |
763 次 |
最近记录: |