【发布时间】:2016-07-01 10:30:52
【问题描述】:
如果我有以下内容,它可以工作(即数字得到分配 1000)
fun main(args: Array<String>) {
var number: Long ? = null // or number = 0
val simpleObject = SimpleClass()
number = 1000
println("Hi + $number")
}
如果我有以下内容,它可以工作(即数字得到分配 1000)
import java.util.*
fun main(args: Array<String>) {
var number: Long = 0
val simpleObject = SimpleClass()
number = simpleObject.getValue<Long>()
println("Hi + $number")
}
class SimpleClass() {
fun <T>getValue(): T {
return 1000 as T
}
}
但如果我有以下,它会失败
import java.util.*
fun main(args: Array<String>) {
var number: Long? = null
val simpleObject = SimpleClass()
number = simpleObject.getValue<Long>()
println("Hi + $number")
}
class SimpleClass() {
fun <T>getValue(): T {
return 1000 as T
}
}
报告的错误在number = simpleObject.getValue<Long>() 行
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
为什么当我初始化var number: Long ? = null 和var number: Long = 0 有不同的结果?我是不是搞错了什么?
更新
使用下面的解决方法,结果还可以。但是使用了一个额外的临时变量。
import java.util.*
fun main(args: Array<String>) {
var number: Long? = null
val simpleObject = SimpleClass()
val temp = simpleObject.getValue<Long>()
number = temp
println("Hi + $number")
}
class SimpleClass() {
fun <T>getValue(): T {
return 1000 as T
}
}
【问题讨论】:
标签: kotlin