Wenn ich die folgende haben, es funktioniert (dh Nummer 1000 erhalten zuweisen)java.lang.Integer kann nicht auf java.lang.Long in Kotlin gegossen werden (wenn der Anfangswert null ist)
fun main(args: Array<String>) {
var number: Long ? = null // or number = 0
val simpleObject = SimpleClass()
number = 1000
println("Hi + $number")
}
Wenn ich habe die folgende, es funktioniert
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
}
}
(dh Nummer 1000 erhalten zuweisen) Aber wenn ich die unten haben, versagt es
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
}
}
der Fehler gemeldet ist auf der number = simpleObject.getValue<Long>()
Linie
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
Warum, wenn ich var number: Long ? = null
und var number: Long = 0
anderes Ergebnis haben initialisieren? Habe ich etwas falsch gemacht?
AKTUALISIERT
Eine Abhilfe die unten verwenden, ist das Ergebnis in Ordnung. Es wird jedoch eine zusätzliche temporäre Variable verwendet.
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
}
}
Dank für die exzellente Detail technischen Grund für die 2 dex-Codes erzeugt bereitstellt. Das erklärt es gut. Ich denke, dass die Kotlin-Sprache verbessert werden sollte, wo sie direkt in java/lang/Number anstelle von java/lang/Long umgewandelt werden könnte. Kurzum, sie sind einfach anders. Upvote deine Antwort und kreuze an, um es zu akzeptieren. Vielen Dank!! – Elye
Sie sind immer willkommen :) – soon
Denken Sie, dass dies das beabsichtigte Verhalten ist? – voddan