2017-05-07 5 views
33

Was bedeutet ein einzelnes Ausrufezeichen in Kotlin? Ich habe es ein paar Mal gesehen, vor allem bei der Verwendung von Java-APIs. Aber ich konnte es weder in der Dokumentation noch auf StackOverflow finden.Einzelnes Ausrufezeichen in Kotlin

Antwort

43

Sie heißen platform types und bedeuten, dass Kotlin nicht weiß, ob dieser Wert null sein kann oder nicht und es liegt an Ihnen zu entscheiden, ob es NULL-Werte gibt oder nicht.

Auf den Punkt gebracht, ist das Problem, dass jeder Verweis aus Java null sein kann, und Kotlin, null sicher durch Design zu sein, gezwungen jeden Java-Wert der Benutzer auf Null überprüfen, oder sichere Anrufe verwenden (?.) oder Nicht-Null-Behauptungen (!!). Die in der reinen Kotlin-Welt sehr nützlichen Features neigen dazu, zum Desaster zu werden, wenn man sie im Kotlin/Java-Setting zu oft verwenden muss.

diesem Grund haben wir einen radikalen Ansatz nahmen und bildeten Kotlin des Typ-System entspannter, wenn kommt zu Java-Interop ist: jetzt Referenzen von Java haben kommen speziell gekennzeichneten Typen - Kotlin Blog

1

A-Typ mit ! notiert genannt wird Plattform Geben Sie ein, was ein Typ ist, der von Java stammt und daher höchstwahrscheinlich null sein kann. Das ist, was der Kotlin-Compiler standardmäßig beim Aufrufen von Java ableitet (für die grundlegendsten Fälle können Java-Methoden annotated sein, um das zu umgehen). Sie sollten Plattformtypen wie Nullable Typen behandeln, es sei denn, Sie wissen sicherlich, dass die bestimmte API nie null zurückgeben wird. Der Compiler ermöglicht die Zuordnung von Plattformtypen zu Variablen, die sowohl Nullable als auch Nicht-Null-Typen sein können.

Notation for Platform Types

[...]

T! bedeutet "T or T?" [...]

Sie unbekannte Plattformtypen als „Typen von beziehen könnten Nullbarkeit ". Es ist auch wichtig zu wissen, dass Sie den Ausrufezeichen-Typ für Ihre eigenen Typen nicht verwenden können, es ist nicht Teil der Kotlin-Syntax, es ist nur eine Notation.