Java functional interfaces
Ex. Runnable, Callable
Constructor SAM - pentru dezambiguizare (când compilatorul nu știe să transforme lambda în interfață funcțională)
fun closeMeeting(m: Meeting): Boolean { // m: Meeting, deci nu poate fi null
return if (m.canClose()) m.close()
else false
}
fun main(args: Array<String>) {
closeMeeting(null) // EROARE de COMPILARE
}
- tipuri nullable: fun closeMeeting(m: Meeting?): Boolean
- safe calls: obj?.method() === if (obj != null) obj.method()
- operatorul Elvis: newMeeting = m ?: Meeting() === newMeeting = (m != null) ? m : new Meeting();
- safe cast: val saveable = obj as? ISaveable === saveable = obj instanceof ISaveable ? obj : null;
- not-null assertion: m!!.close() === assert (m != null) si arunca NPE daca s-a gasit null
- LET: cheama ce e in paranteze doar daca m != null
m?.let { closeMeeting(m) }
- lateinit: Kotlin nu te lasă să declari o variabilă fără să fie inițializată. Soluții: inițializare cu o valoare default, cu null (și atunci devine nullable), sau cu lateinit (când știu că nu vreau să fie nullable).
lateinit var address: Address // promisiune compilatorului că voi inițializa variabila
Niciun comentariu:
Trimiteți un comentariu