2016-12-15 12 views
5

Jestem nowy w firmie Kotlin i szukam porad w przepisywaniu tego kodu w bardziej elegancki sposób.Jak idiomatycznie przekształcić typy nullable w Kotlin?

val ts: Long? = 1481710060773 

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

Próbowałem let, ale myślę, że nie jest lepszy niż oryginalny.

val ts: Long? = 1481710060773 

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

Dzięki.

+0

Twój pierwszy snipped nie może być skompilowany, ponieważ jest to kod niemożliwy w Kotlin ('val date' nie zawsze jest inicjowane). Popraw to lub uściślij: – voddan

+0

Jestem pewien, że jest to kompilacja (przynajmniej działa w Android Studio z Kotlin 1.0.5-2). – iForests

+0

@voddan Całkowicie można zadeklarować, ale nie zainicjować 'val'. Jedynym punktem, w którym mogą wystąpić błędy kompilacji, jest uzyskanie dostępu do niego przed jego przypisaniem i próba przypisania go więcej niż raz. [Definiowanie zmiennych lokalnych] (https://kotlinlang.org/docs/reference/basic-syntax.html#defining-local-variables). – nhaarman

Odpowiedz

5

Można użyć wynik let rozmowy tak:

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

można znaleźć więcej informacji na temat odwołań funkcyjnych korzystających :: składni w Kotlin documentation

+0

IMHO to bardzo tajemnicze rozwiązanie. Z całą pewnością nie jest to idiomatyczne. – voddan

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

Nie trzeba określić jako ts null z długim typem Long?, jeśli przypisujesz mu stałą wartość. Następnie typ Long jest wywnioskowany na ts i nie jest już potrzebny żaden test zerowy.