kotlin伴生對象(java靜態成員)


1.概念

​ 在對象聲明的前面加上companion關鍵字就生成了伴生對象。作用就是為其所在的外部類模擬靜態成員

​ 語法:(ObjectName可省略)

companion object ObjectName : [0~N個父類型] {
	//伴生對象類體
}

2.特點

  • 每個類最多定義一個伴生對象;
  • 伴生對象相當於外部類的對象,可以直接通過外部類名訪問伴生對象的成員;
  • 由於kotlin取消了static關鍵字,伴生對象是為了彌補kotlin沒有static關鍵字修飾的靜態成員的不足;
  • 雖然伴生對象是為其所在對象模擬靜態成員,但是伴生對象成員依然屬於伴生對象本身的成員,而不屬於其外部類的成員。

3.定義伴生對象


fun main() {
    println(OuterClass.name)//伴生對象屬性
    OuterClass.companionFun()//調用伴生對象方法
    OuterClass.CompanionObjectName//通過伴生對象名稱獲取伴生對象本身
}

class OuterClass {
    companion object CompanionObjectName {
        val name = "伴生對象屬性"
        fun companionFun() {
            println("調用伴生對象方法")
        }
    }
}

4.省略伴生對象名字

​ 伴生對象名稱可以省略,省略伴生對象名稱后,如果想獲取伴生對象本身,可以通過Companion獲取。

fun main() {
    println(OuterClass.name)//伴生對象屬性
    OuterClass.companionFun()//調用伴生對象方法
    OuterClass.Companion//通過Companion獲取伴生對象本身
}

class OuterClass {
    companion object {
        val name = "伴生對象屬性"
        fun companionFun() {
            println("調用伴生對象方法")
        }
    }
}

5.為伴生對象擴展成員

​ 為伴生對象擴展成員,如果伴生對象有名字,則通過“外部類.伴生對象名字.成員”的方式擴展;

​ 如果伴生對象沒名字,則通過“外部類.Companion.成員”的方式擴展

fun main() {
    println(OuterClass.name)//伴生對象屬性
    OuterClass.companionFun()//調用伴生對象方法

    println(OuterClass.extraParam)//為伴生對象擴展屬性
    OuterClass.test()//為伴生對象擴展方法
}

class OuterClass {
    companion object {
        val name = "伴生對象屬性"
        fun companionFun() {
            println("調用伴生對象方法")
        }
    }
}

/**
 * 為伴生對象擴展方法
 */
fun OuterClass.Companion.test() {
    println("為伴生對象擴展方法")
}

/**
 * 為伴生對象擴展屬性
 */
val OuterClass.Companion.extraParam: String
    get() = "為伴生對象擴展屬性"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM