
Ö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 ChildClass
aş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
bundaif
kapsam olmalıdırChildClass
bö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ğerlendirilirobj
dır-dirChildClass
. değiştirirsenobj !is ChildClass
ileobj is ChildClass
akı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-dirChildClass
. değiştirirsenobj is ChildClass
ileobj !is ChildClass
akı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.