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 objectbağlı değildir. - Erişim:
inner object'e yalnızca dış sınıf örneği aracılığıyla erişilebilir,companion objectise doğrudan sınıf adıyla erişilir. - Durum:
inner object, örneğe özgü duruma sahip olabilir,companion objectise 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
}