Kotlin:ClassCastException在将double转换为整数时发生了什么?

Kotlin:ClassCastException在将double转换为整数时发生了什么?,kotlin,casting,Kotlin,Casting,我需要在Kotlin中执行for循环: for (setNum in 1..(savedExercisesMap[exerciseKey] as HashMap<*, *>)["sets"] as Int){ 我不认为这是个问题。发生这种情况的原因和解决方法是什么?使用作为关键字,从双转换到Int将永远不会成功。它们都扩展了Number类,并且都没有扩展另一个类,因此该类型既不是向下转换也不是向上转换。要在Kotlin中将double转换为int,应使用.toInt()函数 val

我需要在Kotlin中执行for循环:

for (setNum in 1..(savedExercisesMap[exerciseKey] as HashMap<*, *>)["sets"] as Int){

我不认为这是个问题。发生这种情况的原因和解决方法是什么?

使用
作为关键字,从
转换到
Int
将永远不会成功。它们都扩展了
Number
类,并且都没有扩展另一个类,因此该类型既不是向下转换也不是向上转换。要在Kotlin中将double转换为int,应使用
.toInt()
函数

val aDouble: Double = 2.22222
//val anInt = aDouble as Int // wrong
val anInt = aDouble.toInt() // correct

尝试
toInt()
函数,例如
(savedExercisesMap[exerciseKey]作为HashMap)[“set”]。toInt()
@Sergey unresolved reference…请提供完整的代码:
savedExercisesMap
exerciseKey
等。异常消息非常清楚:您试图将一个双精度转换为一个整数。当然,您可以将其强制转换为Double,然后对该Double调用toInt(),将其转换为Int,但实际上,这在代码中显示了一个很大的设计问题:如果它应该是Int,为什么它是Double?最重要的是,Kotlin是一种类型安全的语言,为什么需要这么多类型转换来完成您想要的任务?
val aDouble: Double = 2.22222
//val anInt = aDouble as Int // wrong
val anInt = aDouble.toInt() // correct