美文网首页
companion:伴生对象

companion:伴生对象

作者: 唯一很无敌 | 来源:发表于2019-05-25 10:02 被阅读0次

    类内部的对象声明可以用 companion 关键字标记:

    class MyClass {
        companion object Factory {
            fun create(): MyClass = MyClass()
        }
    }
    

    该伴生对象的成员可通过只使用类名作为限定符来调用:

    val instance = MyClass.create()
    

    可以省略伴生对象的名称,在这种情况下将使用名称 Companion:

    class MyClass {
        companion object { }
    }
    val x = MyClass.Companion
    

    其自身所用的类的名称(不是另一个名称的限定符)可用作对该类的伴生对象 (无论是否命名)的引用:

    class MyClass1 {
        companion object Named { }
    }
    val x = MyClass1
    class MyClass2 {
        companion object { }
    }
    val y = MyClass2
    

    请注意,即使伴生对象的成员看起来像其他语言的静态成员,在运行时他们仍然是真实对象的实例成员,而且,例如还可以实现接口:

    interface Factory<T> {
        fun create(): T
    }
    class MyClass {
        companion object : Factory<MyClass> {
            override fun create(): MyClass = MyClass()
        }
    }
    val f: Factory<MyClass> = MyClass
    

    相关文章

      网友评论

          本文标题:companion:伴生对象

          本文链接:https://www.haomeiwen.com/subject/ivkazqtx.html