Sobes.tech
Middle

Kotlinде класс ичиндеги объект менен кошо турган объекттин айырмасы эмнеде?

sobes.tech AI

AIден жооп

Класс ичиндеги inner object тышкы классдын үлгүсүнө байланыштуу жана анын жашоо циклинин ичинде гана бар болот. companion object — singleton катары иштейт, класс үлгүсүнө байланыштуу эмес жана түз эле класс аталышы аркылуу жеткиликтүү.

Негизги айырмачылыктар:

  • Үлгү менен байланыш: inner object тышкы класс үлгүсүнө байланыштуу, companion object — байланышсыз.
  • Жеткиликтүүлүк: inner objectке тек тышкы класс үлгүсү аркылуу гана жетүүгө болот, companion object — түз эле класс аталышы аркылуу.
  • Абалы: inner object өзгөчө үлгүгө тиешелүү абалга ээ болушу мүмкүн, companion object — бүт класска жалпы.
  • Колдонуу: inner object көбүнчө State паттернин ишке ашыруу үчүн же байланышкан объекттерди үлгү ичинде топтоо үчүн колдонулат. companion object фабрика ыкмалары, константалар же статикалык мүчөлөр үчүн колдонулат.

Мисал:

class Outer {
    private var outerValue: Int = 0

    inner object InnerObject {
        fun accessOuterValue(): Int {
            return outerValue // inner object тышкы класстын мүчөлөрүнө жеткиликтүү
        }
    }

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

        fun createOuter(): Outer {
            return Outer() // фабрика ыкмасы
        }
    }
}

fun main() {
    val outer = Outer.CompanionObject.createOuter() // companion objectке жетүү
    // val inner = Outer.InnerObject // Ката: Outer үлгүсү жок болсо InnerObjectке жетүү мүмкүн эмес
    val inner = outer.InnerObject // үлгү аркылуу ички объектке жетүү

    println(inner.accessOuterValue())
    println(Outer.CompanionObject.CONSTANT)
    println(Outer.CONSTANT) // синтаксистик татымал — CompanionObject мүчөлөрүнө жетүү
}