Kotlin-具有溢出异常的类型转换
Kotlin-具有溢出异常的类型转换,kotlin,type-conversion,Kotlin,Type Conversion,(123L).toInt()产生123但长.MAX\u值.toInt()产生-1。这显然是不对的。无需编写大量样板代码,有没有办法让Kotlin在值超出目标类型的范围/界限时引发异常?如果您在JVM上运行,您可以使用: 返回长参数的值;如果值溢出int,则引发异常 似乎没有一种纯粹的Kotlin方式,但至少你可以很好地包装它: fun Long.toIntExact() = Math.toIntExact(this) TL;DR您可以创建一个自定义扩展函数,用于检查值是否介于Int.MIN_值
(123L).toInt()
产生123
但长.MAX\u值.toInt()
产生-1
。这显然是不对的。无需编写大量样板代码,有没有办法让Kotlin在值超出目标类型的范围/界限时引发异常?如果您在JVM上运行,您可以使用:
返回长参数的值;如果值溢出int,则引发异常
似乎没有一种纯粹的Kotlin方式,但至少你可以很好地包装它:
fun Long.toIntExact() = Math.toIntExact(this)
TL;DR您可以创建一个自定义扩展函数,用于检查值是否介于Int.MIN_值和Int.MAX_值之间
fun Long.toIntThrowing() : Int {
if (this < Int.MIN_VALUE || this > Int.MAX_VALUE) {
throw RuntimeException()
}
return this.toInt()
}
结果:
2147483647
-2147483648
-2147483647
-2
-1
发件人:
算术溢出异常:这可能会使算术运算速度大大降低,如果不改变JVM,我们看不到如何避免它,我们也不准备接受这种降低
显然这是不对的toInt()
完成了它的设计任务:“生成的Int
值由该Long
值的最低有效32位表示”,并且不会引发异常,但您可以编写一个扩展函数来实现这一点。
2147483647
-2147483648
-2147483647
-2
-1