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方面,您可以使用assertassert <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 自动锻造的示例。 *

Java中是不是有可移植的共享内存机制?

是否有可用于在我的网站中进行视频修剪/剪切的 flash/JavaScript 库?

Google Guava中的前置条件

将excel表格导入番石榴表

是否有可用于列出非 zip 档案内容的 gem?