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

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

Dies gibt mir immer noch eine Null-Sicherheit, kompilieren Fehler, aber wie kann ich>, <,> = oder < = in diesem Zusammenhang?Was ist der richtige Weg für den Vergleich von "größer als", "weniger als" auf nullbaren ganzen Zahlen in Kotlin?

+0

Warum verwendest du für das Alter nicht nicht nullbare Int? Wird das Alter irgendwann auf Null gesetzt? –

+0

Ich brauche Nullable Int hier aus irgendeinem Grund. –

+0

Die Antwort von @sergey unten ist korrekt und ist eine gute Lösung. Können Sie es überprüfen und wenn gut, akzeptieren Sie es. Wenn nicht, dann hinterlassen Sie bitte zusätzliche Kommentare. –

Antwort

6
var age : Int? = 0 

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

würde Die andere Lösung mit Delegierten sein:

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

Also, wenn Sie yo Alter oder überprüfen isAdult zu bekommen versuchen vor dem Alter tatsächlich dann zugewiesen wurde Du bekommt Ausnahme statt null

auf jeden Fall glaube ich, Alter = 0 ist eine Art Magie, die ein Tag Problem führen kann (auch prod Ausgabe)

1

verwendete ich die Null-Koaleszenz-Operator von NULL festlegbare Int zu konvertieren? Nicht-Nullable-Int:

var age: Int? = 0 

public var isAdult: Boolean? = null 
    get() = if(age == null) null else (age ?: 0 >= 18) 
Verwandte Themen