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

2 Solutions collect form web for “如何在Kotlin中编译时间常数NaN或POSITIVE_INFINITY?”

作为一种解决方法,您可以使用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 
  • Android Studio(Kotlin)如何将StringArray转换为MutableList
  • 迭代:Kotlin是否有像Python一样的“枚举”function?
  • Kotlin中可能导致内存泄漏的语言功能是什么?
  • Kotlin - 可能会错误地报告一个未使用的代码
  • 如何访问反映在kotlin的静态字段?
  • 部署到Android,桌面和浏览器的单个Kotlin + libgdx代码库?
  • 在kotlin单元测试中如何赋值lateinit var
  • 在Android Studio中将“java”目录重命名为“kotlin”
  • Android Studio执行失败的任务compilefreeDebugKotlin
  • 在xml ids中使用点
  • 如何将可空类型传递给非空类型的函数?
  • Kotlin language will be the best programming language for Android.