是否有与 Kotlin 的 require 函数等效的内置 Java?

vab*_*048 0 java kotlin

Kotlin 有一个require函数,可以像这样使用(从参考文档中复制):

fun getIndices(count: Int): List<Int> {
    require(count >= 0) { "Count must be non-negative, was $count" }
    // ...
    return List(count) { it + 1 }
}

// getIndices(-1) // will fail with IllegalArgumentException

println(getIndices(3)) // [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

如果值为 false,该函数本质上会抛出 IllegalArgumentException。显然,这可以很容易地在 Java 中实现 - 但我想知道 JDK 或 apache 库(或任何其他无处不在的库)中是否已经有一些东西提供了这样的功能?

Ism*_*maz 5

您可以使用assert与 Kotlinrequire方法等效的函数。

assert count >= 0 : "Count must be non-negative, was " + count;
Run Code Online (Sandbox Code Playgroud)

使用断言编程

JDK 默认禁用断言操作。如果要启用断言操作,则必须使用 VM 选项定义启用的包或类位置,例如-ea:com.example.demo...

启用和禁用断言

我更喜欢 Spring Framework 的org.springframework.util.Assert类,因为有很多验证参数的方法。

更简单的方法:

Assert.isTrue(count >= 0, "Count must be non-negative, was " + count);
Run Code Online (Sandbox Code Playgroud)

懒惰的方式(为了更好的性能和与 kotlinrequire函数相同的流程):

Assert.isTrue(count >= 0, () -> "Count must be non-negative, was " + count);
Run Code Online (Sandbox Code Playgroud)

Spring 断言语句

对于单元测试,您可以使用 Junit ( org.junit.Assert) 或 Jupiter ( org.junit.jupiter.api.Assertions) 断言函数。

  • 像 Junit 或 Spring 这样的普通函数的一个缺点是,即使断言通过,它们也总是构造消息字符串;在高性能系统中,额外的临时对象可能会产生重大影响。(当然,这就是 Kotlin 函数采用 lambda 的原因。) (2认同)