2016-12-15 4 views
5

Ich bin neu in Kotlin, und ich bin auf der Suche nach der Empfehlung, den folgenden Code auf elegantere Weise umzuschreiben.Wie man NULL-fähige Typen in Kotlin idiomatisch transformiert?

val ts: Long? = 1481710060773 

val date: Date? 
if (ts != null) { 
    date = Date(ts) 
} 

Ich habe let versucht, aber ich denke, es ist als das Original nicht besser ist.

val ts: Long? = 1481710060773 

val date: Date? 
ts?.let { 
    date = Date(ts) 
} 

Danke.

+0

Ihr erstes Snipped muss nicht kompiliert worden sein, da es ein unmöglicher Code in Kotlin ist (Val-Datum wird nicht immer initialisiert). Bitte korrigieren Sie es oder machen Sie es genauer – voddan

+0

Ich bin sicher, dass es kompilierbar ist (zumindest funktioniert es in Android Studio mit Kotlin 1.0.5-2). – iForests

+0

@voddan Es ist durchaus möglich, ein 'val' zu deklarieren, aber nicht zu initialisieren. Der einzige Punkt, an dem Kompilierungsfehler auftreten können, besteht darin, vor der Zuweisung auf sie zuzugreifen und sie mehrmals zuzuweisen. [Definieren von lokalen Variablen] (https://kotlinlang.org/docs/reference/basic-syntax.html#defining-local-variables). – nhaarman

Antwort

5

Sie können wie so Ergebnis let Aufruf verwenden:

val date = ts?.let(::Date) 

Sie können mehr über Funktion Referenzen finden mit :: Syntax in Kotlin documentation

+0

IMHO ist dies eine sehr kryptische Lösung. Es ist ganz sicher nicht idiomatisch. – voddan

-1
val ts = 1481710060773L 
val date = Date(ts) 

Sie brauchen nicht ts als angeben Nullable long type Long?, wenn Sie ihm einen konstanten Wert zuweisen. Dann wird der Typ auf ts gefolgert und es ist keine Nullprüfung mehr nötig.

Verwandte Themen