İçeriğe geç

Kotlin Inner ve Nested Classlar – Android Eski Notlar #20

İç içe class'lar JAVA'da olduğu gibi Kotlin'de de tanımlayabiliyoruz. Aşağıdaki örneğe bakalım.

package nestedVeInner

fun main(args: Array<String>) {
    var inner = Outter.Inner().testInner("test")
}

class Outter <T>{
    var t1 : T? = null

    class Inner{

        fun <T> testInner(v1 : T)
        {
            println("Test başarılı: ${v1}")
        }
    }
}

Burada Inner class'ın içindeyken Outter class'ın elemanlarına erişememekteyiz. Bu sorunu çözmek için kotlin'de inner anahtar kelimesi kullanılmaktadır. Kodlarımızı aşağıdaki gibi değiştirebilir ve sonuçları elde edebiliriz.

package nestedVeInner

fun main(args: Array<String>) {
    var inner = Outter<String>("test").Inner().testInner("test")
}

class Outter <T>(val t1 : T){

    inner class Inner{

        fun <T> testInner(v1 : T)
        {
            println("Test başarılı: ${v1}")
            println("Ana class: ${t1}")
        }
    }
}
Test başarılı: test
Ana class: test

Direkt olarak bir örnek üzerinde gördük. Peki bunu nerelerde kullanabiliriz? Mantıksal açıdan aynı işlemleri gerçekleştiren class'ları bir arada tutmak için kullanılabilir ve daha kolay yönetilmesini sağlayabilir. Aslında inner class'lar Non-static nested class olarak isimlendirilir. Bu yüzde ilk örnekte Outter.Inner().testInner("test") şeklinde erişebilirken, nested class'ımızı inner class yaptıktan sonra Outter<String>("test").Inner().testInner("test") olarak erişim sağladık.

Ekstra olarak gerekirse kotlinde bir interface içerisinde nested class tanımlayabiliriz.

Kategori:AndroidKotlin

Tek Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir