如何在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