【问题标题】:Kotlin: ClassCastException when casting double to integer?Kotlin:将双精度转换为整数时出现 ClassCastException?
【发布时间】:2019-01-07 15:45:17
【问题描述】:

我需要在 Kotlin 中做一个 for 循环:

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

但我收到此错误:

java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer

我认为这不是问题。发生这种情况是否有原因以及如何解决?

【问题讨论】:

  • 尝试toInt()函数,例如(savedExercisesMap[exerciseKey] as HashMap&lt;*, *&gt;)["sets"].toInt()
  • @Sergey 未解决的参考...
  • 能否提供完整代码:savedExercisesMapexerciseKey
  • 异常信息非常清楚:您正在尝试将 Double 转换为 Integer。您当然可以将其转换为 Double,然后在该 Double 上调用 toInt() 以将其转换为 Int,但实际上,这在您的代码中显示了一个很大的设计问题:如果它应该是一个 Int,为什么会这样?双倍?最重要的是,Kotlin 是一种类型安全的语言,为什么需要这么多强制转换来做你想做的事?

标签: kotlin casting


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2016-01-01
    • 2013-05-13
    • 2014-11-10
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多