Sobes.tech
Middle

Kotlin'de bir sınıf içindeki nesne ile nesne arkadaşının farkı nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir sınıf içindeki inner object, dış sınıfın bir örneğine bağlıdır ve yalnızca onun yaşam döngüsü boyunca var olur. companion object ise bir singleton olarak var olur, sınıf örneğine bağlı değildir ve doğrudan sınıf adıyla erişilebilir.

Ana farklar:

  • Örnekle bağlantı: inner object, dış sınıf örneğine bağlıdır, companion object bağlı değildir.
  • Erişim: inner object'e yalnızca dış sınıf örneği aracılığıyla erişilebilir, companion object ise doğrudan sınıf adıyla erişilir.
  • Durum: inner object, örneğe özgü duruma sahip olabilir, companion object ise tüm sınıf için ortaktır.
  • Kullanım: inner object, genellikle State deseni uygulamak veya ilişkili nesneleri bir örneğin içinde gruplamak için kullanılır. companion object, fabrika metodları, sabitler veya sınıfın statik üyeleri için kullanılır.

Örnek:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner object, dış sınıfın üyelerine erişebilir
        }
    }

    companion object CompanionObject {
        const val CONSTANT = "Some constant"

        fun createOuter(): Outer {
            return Outer() // fabrika metodu
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // companion object'e erişim
    // val inner = Outer.InnerObject // Hata: Outer örneği olmadan InnerObject'e erişilemez
    val inner = outer.InnerObject // örnek aracılığıyla inner object'e erişim

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // CompanionObject üyelerine erişim için sözdizimi şekeridir
}