If I have the following, it works (i.e. number get assign 1000)
fun main(args: Array<String>) {
var number: Long ? = null // or number = 0
val simpleObject = SimpleClass()
number = 1000
println("Hi + $number")
}
If I have the following, it works (i.e. number get assign 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
}
}
But if I have the below, it fails
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
}
}
The error reported is on the number = simpleObject.getValue<Long>() line
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Why when I initialise var number: Long ? = null and var number: Long = 0 have different result? Did I get anything wrong?
UPDATED
A workaround using the below, the result is okay. But an additional temp variable is used.
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
}
}