kotlin伴生对象与Java中的static

14 阅读1分钟

在 Kotlin 中,伴生对象( companion object) 是类中的一个特殊对象,它类似于 Java 的静态成员。通过伴生对象,你可以定义一些与类相关的方法或属性,而无需创建类的实例

  1. Kotlin 没有直接的 static 关键字,但伴生对象提供了类似的功能

可以把伴生对象(companion object)想象成一个“隐藏的单例对象”,它和类绑定在一起,因为通过类是能够直接访问伴生对象的Companion

class User private constructor(val name:String){
    companion object {
        fun createUser(name:String):User{
            return User(name)
        }
    }

    // 使用 buildString 生成 toString
    override fun toString(): String = buildString {
        append("User(name='")
        append(name)
        append("')")
    }
}

fun main() {
    val user = User.createUser("pkmer")
    println(user)
    // 直接访问伴生对象
    val companion = User.Companion
    val john= companion.createUser("John")
    println(john)

}

与Java static修饰的方法对比

因为伴生对象是与类绑定在一起的,能够直接访问,其实就像Java中static。只不过中间多了一层伴生的对象而已。

class User{
    companion object {
        fun hello() = println("我可以调用吗")
    }
}

fun main() {
    // 直接访问伴生对象
    val companion = User.Companion
    // 这里通过伴生对象来访问方法,就非常像java static修饰的方法了
    companion.hello()
}