java 8+中是否有可用于替代番石榴前置条件的良好现场验证?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 8+中是否有可用于替代番石榴前置条件的良好现场验证?相关的知识,希望对你有一定的参考价值。
我想在我的应用程序中的方法中添加字段验证(例如,字段不为空且为正)。
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的Preconditions类提供的详尽的验证列表,如下所示:
checkArgument(boolean) throws IllegalArgumentException
checkState(boolean) throws IllegalStateException
etc.
Java 8+中是否有更好的替代方法用于字段验证,这样我就不必为guava包含外部库了?
Java 8+(直到12)没有这样的方法(可能在将来会出现一些变化)。
- 从纯Java方面,您可以使用assert:
assert <condition> : <message>
如果断言失败,AssertionError
将与<message>
一起投掷。
但是,您应该确保通过向JVM添加-ea
属性来激活它。
断言为失败的案例添加更有意义的信息。
- 作为替代方案,您可以使用
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);
我想你可以使用Apache Commons Lang。他们在Validate class有很多验证方法。我不确定它是否足够表达,但如果你还需要其他任何东西,只为自己编写它就可以了,简单的检查应该没有太多的代码。
此外,如果您希望将这些检查集成到主要业务逻辑代码中(而不仅仅是单元测试),那么您应该查看Bean Validation。这样你绝对不会重新发明轮子,你的测试只需要从验证框架中得到例外。
干杯。
我使用spring验证,但有时我通过扩展spring验证来控制一些自定义行为来编写验证
如果您更喜欢验证方法,为什么不自己编写?很多人都这样做。它简单,快速,不需要任何外部依赖。
请记住,如果具有表达名称的条件,大多数这些方法都很简单!
然后是JSR 380 a.k.a“Bean Validation”。它允许您使用注释定义验证约束:
void assertionTest (@NotNull @PositiveOrZero Integer i) { ... }
BV对于大型应用有几个好处:
- 减少混乱,您可以在一个地方定义约束
- 许多有用的预定义约束
- 自定义注释
- 本地化错误消息(可以轻松定制)
- 在考虑性能的情况下验证复杂对象和对象图
- 上下文感知验证
- 与其他库和框架集成
- 以及更多
看看reference implementationn's documentation
以上是关于java 8+中是否有可用于替代番石榴前置条件的良好现场验证?的主要内容,如果未能解决你的问题,请参考以下文章
是否有可用于查看器版本 7 的 angular 8 自动锻造的示例。 *