如何在Kotlin中编译时间常数NaN或POSITIVE_INFINITY?

我试过了:

import kotlin.Double.Companion.POSITIVE_INFINITY import kotlin.Double.Companion.NaN const val inf = POSITIVE_INFINITY const val nan = NaN 

但是我得到:

Const'val'初始值设定项应该是一个常数值


编辑:

我需要这样做的原因是因为Junit5的参数化测试 :

  @ParameterizedTest @ValueSource(doubles = doubleArrayOf(nan, inf, -2* epsilon, 1.5, -0.5, 1.0 + 2* epsilon)) fun ensureNotAProbability(number: Double) { ... } 

由于Java注释的某些限制(在本答复中描述),“传递给注释”的事情只能是编译时常量。 因此,我需要一个编译时间NaN,积极和消极的infinities。

作为一种解决方法,您可以使用IEEE 754标准保证0.0 / 0.0为NaN和1.0 / 0.0为+∞的事实:

 @Suppress("DIVISION_BY_ZERO") const val NAN: Double = 0.0 / 0.0 @Suppress("DIVISION_BY_ZERO") const val INFINITY: Double = 1.0 / 0.0 fun main(args: Array<String>) { println(NAN) // NaN println(INFINITY) // Infinity } 

你不需要重新定义任何东西。 只需导入一个别名 :

 import kotlin.Double.Companion.POSITIVE_INFINITY as inf import kotlin.Double.Companion.NaN as nan