如何在Kotlin中启用断言?

Max*_*xim 5 assertion kotlin

我已经创建了样本类来测试Kotlin中的断言

class Assertion {
    fun sum(a: Int, b: Int): Int {
        assert(a > 0 && b > 0)
        return a + b
    }
}

fun main(args: Array<String>) {
    Assertion().sum(-1, 2)
}
Run Code Online (Sandbox Code Playgroud)

并使用以下选项,但该程序不会抛出断言异常.

-ea:AssertionKt,-ea:Assertion-ea:...

yol*_*ole 7

要在Kotlin中启用断言,请使用该-ea选项运行JVM ,而不使用任何其他说明符.

  • 关于这个主题的所有答案在“使用`-ea`选项运行JVM”这样的句子中都是统一的,但是我在Android Studio中找不到如何实际做到这一点。谷歌搜索“kotlin android studio set jvm option”或类似的没有解决方案。编辑:经过一段时间的问题改写后,我找到了解决方案,如果有人会想知道相同的[在 IntelliJ IDEA 中添加 -ea 等编译器选项的位置?](/sf/ask/1271778021/ -add-compiler-options-like-ea-in-intellij-idea) (2认同)

Max*_*xim 6

在 中Kotlin,与 不同的是Java,断言只能在顶层启用/禁用,即通过指定-eaJVM 选项。

在 Kotlin 中,幕后assert()是一个在文件中定义的函数AssertionsJVM.ktENABLED对象中的变量_Assertions用于确定是否启用断言。

@PublishedApi
internal object _Assertions {
    @JvmField @PublishedApi
    internal val ENABLED: Boolean = javaClass.desiredAssertionStatus()
}
Run Code Online (Sandbox Code Playgroud)

如果为该类启用了断言,则ENABLED将该变量分配给该变量。true_Assertions

因此,要在 Kotlin 中打开断言,必须在 JVM 中启用它们

  • 所有课程-ea
  • 或某一特定类别-ea:kotlin._Assertions