In Kotlin, Wie konvertiere ich ein Int? ein Int
Ich bin mit einem HashMap<Int, Int>
in Kotlin und wenn ich get
der Rückgabetyp ist Int?
.
Wie kann ich umwandeln der Int?
zu einem Int
?
Bisher habe ich versucht, mit Int?.toInt()
, aber das scheint wieder ein Int?
.
Schreibe ich eine Fibonacci-Funktion, und mein code sieht wie folgt aus:
val fibMemo : Map<Int, Int> = HashMap<Int,Int>()
fun fibN(n:Int) : Int {
if (n == 0 || n == 1) return 1
if (fibMemo.containsKey(n))
//Error here: Type mismatch: inferred type is Int? but Int was expected
return fibMemo.get(n)?.toInt()
else {
val newNum : Int = fibN(n-1) + fibN(n-2)
fibMemo.put(n, newNum)
return newNum
}
}
- Gibt es neuere Antworten, die den Strom für Kotlin.
- Diese Frage wird nun beantwortet durch das immer aktuelle und vollständige: stackoverflow.com/questions/34498562 Nach dieser Frage angenommen hat, Antworten und Stimmen, diese sollten geschlossen werden, als doppelte, die. In meta.stackexchange.com eine empfohlene Weg, um zu modernisieren, Fragen und Antworten ist eine neue zu erstellen, und schließen Sie dann das alte, während das hinzufügen einer Referenz auf die neue.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die direkte Antwort, verwenden Sie die
!!
operator geltend zu machen, denen Sie Vertrauen, ein Wert, der NICHT null ist und somit Veränderung seiner Art, der nicht null entspricht. Ein einfaches Beispiel zeigt die Behauptung ermöglicht die Konvertierung (und das gilt für alle nullable-Typ, nicht nurInt?
)Anderen Weg, um zu konvertieren ein Wert wird über ein null-check. Nicht nützlich, im code oben, aber in den anderen code (siehe Null-Bedingungen):
Dieser Fragen wird auch beantwortet durch die idiomatische Behandlung von null-Zulässigkeit Frage: In Kotlin, was die idiomatischen Umgang mit nullable-Werten, verweisen auf oder konvertieren Sie
Um zu konvertieren eine
Int?
zu einemInt
verwenden Sie diesure()
Methode.Die betreffende Zeile sollte wie folgt Aussehen:
Quelle
Warnung: die oben genannten Informationen nicht mehr greifen.
sure
wurde ersetzt durch!!
. Siehe: http://blog.jetbrains.com/kotlin/migrating-sure/.sure()
Antwort völlig, da ist es völlig falsch für die aktuelle Kotlin.Können Sie auch getOrPut Funktion zu vermeiden, enthält/setzen Sie code. Sehen
Neben der Prüfung auf das Vorhandensein des Schlüssels, werden Sie auch brauchen, um sicherzustellen, dass der zurückgegebene Wert ist nicht
null
alsjava.util.HashMap
ermöglichtnull
Werte.Können Sie tun, indem Sie entweder um Ihren Ruf zu
get
mit einer explizitennull
prüfen oder durch aufrufen!!
auf den zurückgegebenen Wert.Ihre Problemumgehung zu verwenden
as Int
wird markiert als eine unsichere cast-Warnung, die von der IDEE, und ist daher nicht ratsam.Int
dann? Ich bin immer einfügen von null-Ganzzahlen in die Karte, so sind Sie garantiert nicht-null.sure()
ist, dass Sie verlieren null Sicherheit zur Laufzeit. Da du jedoch sicher sein, dass Sie immer kartierschlüssel nicht null - Werte, sollten Sie voran gehen und verwendensure()
unabhängig.!!
deine Antwort, da es nicht Teil der Kotlin für die Jahre.Der einfachste Weg ist die Verwendung eines null-check
Finden Sie mehr über die null-sichere Typumwandlungen hier : Null Sicherheit - Kotlin
Die kurze Antwort ist können Sie nicht, es sei denn, Sie nachdrücklich Zustand an den compiler, dass die
nullable int
können nicht und werden nichtnull
durch die Verwendung von zwei Ausrufezeichen oder durch die Verwendung einesif statement
; dennint
ist einsubtype
vonint?
Ist hier ein Beispiel.
Können Sie auch einen default-Wert in null-Fall:
val int: Int
val nullableInt: Int? = null
int = nullableInt ?: 0