2015-03-24 12 views
5
var _age: Int? = 0 

public var isAdult: Boolean? = false 
    get() = _age?.compareTo(18) >= 0 

To nadal daje mi bezpieczeństwo zerowe, błąd kompilacji, ale jak mogę użyć>, <,> = lub < = w tej sprawie?Jaki jest właściwy sposób używania porównania "większy niż", "mniej niż" na liczbach całkowitych zerulujących w Kotlin?

+0

Dlaczego nie używasz Non nullable Int dla wieku? Czy wiek w pewnym momencie jest ustawiony na wartość null? –

+0

Potrzebuję nullable Int tutaj z jakiegoś powodu. –

+0

Odpowiedź z @sergey poniżej jest poprawna i jest dobrym rozwiązaniem. Czy potrafisz to przejrzeć, a jeśli dobrze, zaakceptuj to. Jeśli nie, zostaw dodatkowe komentarze. –

Odpowiedz

6
var age : Int? = 0 

public val isAdult : Boolean? 
    get() = age?.let { it >= 18 } 

Innym rozwiązaniem byłoby przy użyciu delegatów:

var age : Int by Delegates.notNull() 
public val isAdult : Boolean 
    get() = age >= 18 

Więc jeśli spróbujesz yo dostać wiek lub sprawdź isAdult przed wiekiem faktycznie przypisany Pokochasz więc uzyskać wyjątek zamiast NULL

każdym razie wierzę wiek = 0 jest jakaś magia, która pewnego dnia może prowadzić do wydania (nawet prod problem)

1

Użyłem operatora koalescencyjnego null do konwersji z zerowego Int? do non wartości pustych Int:

var age: Int? = 0 

public var isAdult: Boolean? = null 
    get() = if(age == null) null else (age ?: 0 >= 18) 
Powiązane problemy