2017-08-09 4 views
4

Ich schrieb einen einfachen Codeblock zum Speichern fragments mit ids in Map. Die value und key der Karte wird als nicht Nullable initialisiert, aber wenn ich sie als key und value erhalten möchte, gibt es nullable Typ Daten. Also verstehe ich nicht warum? Gibt es einen anderen Kartentyp, der non-nullable Daten in Kotlin zurückgibt?Warum gibt mutableMapOf NULL zurück?

enter image description here

Antwort

9

Es ist möglich, dass es keinen Wert für die Taste [Position], das wird es null machen zurück:

abstract operator fun get(key: K): V? 

Gibt den Wert der gegebenen Taste entspricht, oder null wenn ein solcher Schlüssel nicht in der Karte vorhanden ist.

3

@nhaarman ist richtig, aber Sie können getValue(key) verwenden, die Nicht-Nullable-Rückkehr aber NoSuchElementException wenn nicht gefunden werfen.

/** 
* Returns the value for the given [key] or throws an exception if there is no such key in the map. 
* 
* If the map was created by [withDefault], resorts to its `defaultValue` provider function 
* instead of throwing an exception. 
* 
* @throws NoSuchElementException when the map doesn't contain a value for the specified key and 
* no implicit default value was provided for that map. 
*/ 
@SinceKotlin("1.1") 
public fun <K, V> Map<K, V>.getValue(key: K): V = getOrImplicitDefault(key) 
+1

Vor Ihrer Antwort schrieb ich dies. : '' '' override Spaß getItem (Position: Int): Fragment = (fragmentsAndIds [Position])?: throw NullPointerException() '' '' Es macht ähnliches. Aber Ihre Option ist sauberer und kurz. Ich werde es benutzen. danke – emiraslan

+1

Ja, es macht das Gleiche. Übrigens kannst du 'override fun getItem (position: Int) schreiben: Fragment = (fragmentsAndIds [position]) !!'. Das '!!' wird 'NullPointerException' werfen, wenn null;) –

Verwandte Themen