Shy*_*dda 0 classcastexception kotlin
我正在尝试将Any对象的类型转换为Long,但它显示以下异常:
java.lang.ClassCastException:java.lang.Object[] 无法转换为 java.lang.Long
在这里我想将其转换any为Long如下所示:
fun getMyLongValue(vararg any: Any) : Long {
return when(val tmp = any.first()) {
is Number -> tmp.toLong()
else -> throw Exception("not a number")
}
}
Run Code Online (Sandbox Code Playgroud)
我将参数传递给它,例如:
fun main() {
val param1 = 10
val param2 = 20
println(getMyValue(param1.toLong(), param2.toLong()))
}
fun getMyValue(vararg any: Any): Long {
return getMyLongValue(any)
}
Run Code Online (Sandbox Code Playgroud)
我正在传递 Int 值,但我想转换为 Long。那为什么不允许呢?
因为拳击。Any对应于 Java Object,因此所有原语在传递给 时都会被装箱getMyLongValue。并且您不能将盒装Int( java.lang.Integer) 转换为Long. 您需要单独处理基元,或者使用装箱的Int/ Long/etc 的事实。延伸Number,例如
fun getMyLongValue(vararg any: Any) : Long {
return when(val tmp = any.first()) {
is Number -> tmp.toLong()
else -> throw Exception("not a number") // or do something else reasonable for your case
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
此问题与转换为Long. 当你写的时候
fun getMyLongValue(vararg any: Any) { ... }
fun getMyValue(vararg any: Any): Long {
return getMyLongValue(any)
}
Run Code Online (Sandbox Code Playgroud)
您将整个anyfromgetMyValue作为单个参数(类型为Array<Any>)传递。要单独传递10and 15(或 的其他参数getMyValue),您需要使用扩展运算符:
fun getMyValue(vararg any: Any): Long {
return getMyLongValue(*any)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5977 次 |
| 最近记录: |