Kotlin Smart Cast Harika!

Kotlin Smart Cast Harika!

Önceki yazımda bu harika Kotlin özelliğini tamamen kaçırdım – C# ile Kotlin Sözdizimi Karşılaştırmalarını Tamamlayın.

Bu akıllı oyuncu kadrosundan ancak 8 aylık Kotlin geliştirmesinden sonra haberdar oldum ve bilmeden kullanıyor olabilirim. bu Android Stüdyosu IDE halleder!

sende var diyelim BaseClass ve ChildClass bunun gibi.

open class BaseClass
class ChildClass(val value: Int): BaseClass()

ve, sen yaratırsın ChildClass nesne tarafından başvurulan ve BaseClass

val obj: BaseClass = ChildClass(value = 7)

içindeki verilere erişmek için ChildClassaşağıda açık döküm yaparsınız.

val childObj = obj as ChildClass
childObj.value

Ancak Kotlin derleyicisi aşağıdaki senaryoda sizin için otomatik olarak akıllı yayın yapabilir:

örnek 1

fun smartCastExample1() {
    val obj: BaseClass = ChildClass(value = 7)
    
    

    if (obj is ChildClass) {
        
        
        println("Child value is ${obj.value}")

        
        val childObj = obj as ChildClass
        println("Child value is ${childObj.value}")
    }
}

obj bunda if kapsam olmalıdır ChildClassböylece Kotlin derleyici akıllı yayınlar

Örnek 2

fun smartCastExample2() {
    val obj: BaseClass = ChildClass(value = 7)
    if (obj !is ChildClass) return

    
    println("Child value is ${obj.value}")
}

obj burada olmalı ChildClass değilse iade edildiğinden beri.

Örnek 3

fun smartCastExample3() {
    val obj: BaseClass = ChildClass(value = 7)

    
    if (obj !is ChildClass || obj.value == 7) return

}

Bu obj.value sadece ne zaman değerlendirilir obj dır-dir ChildClass. değiştirirsen obj !is ChildClass ile obj is ChildClassakıllı döküm çalışmaz.

Örnek 4

fun smartCastExample3() {
    val obj: BaseClass = ChildClass(value = 7)

    
    if (obj is ChildClass && obj.value == 7) return
}

Yukarıdaki örneğe benzer şekilde, ikinci kontrol yalnızca şu durumlarda değerlendirilir: obj dır-dir ChildClass. değiştirirsen obj is ChildClass ile obj !is ChildClassakıllı döküm çalışmaz.

Buradaki örnek, süper türden alt türe yayınlanmıştır. Ayrıca null yapılabilir türden null olmayan türe kadar çalışır. Daha fazla örneğe bakın burada.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.