首页 > 解决方案 > comapion 对象而不是静态方法和字段有什么好处?

问题描述

我问自己为什么 Kotlin 使用伴随对象而不是静态方法和字段?它是样板的减少吗?我认为在花括号内编写具有所有属性和函数的伴随对象比每次都编写静态更容易。这是一个例子。

class Hero {
    companion object {
        private var numberOfHeroes = 0

        fun addNewHero() {
            numberOfHeroes++
        }

        fun deleteHero() {
            numberOfHeroes--
        }

        fun getAllHeroes(): Int {
            return numberOfHeroes
        }
    }

    init {
        addNewHero()
    }
}

fun main() {

    val h1 = Hero()
    val h2 = Hero()

    print("Number of heros: ${Hero.getAllHeroes()}") // result is 2
}

但这是唯一的好处吗?我知道简洁对 Kotlin 来说非常重要,但我认为还会有更多。

标签: javakotlinstaticcompanion-object

解决方案


做一个或另一个没有好处(或缺点,就此而言)。它只是一种语言结构。而且,坦率地说,你应该问一下伴随对象扩展函数与静态方法相比有什么好处。

Java 和大多数其他 OO 语言在必须只存在一个字段实例的情况下选择使用静态字段,在以下情况下使用静态方法:a)类的实例无关紧要或不重要,或 b)它实际上有点,但是编写静态方法的开发人员无法控制类,即用户想要扩展现有类的功能,他/她不是原作者(提供实用程序功能所以说话)。

后者的示例将是String该类的实用方法,用于检查所讨论的字符串是否为空白(仅包含空格或空)。String最终用户无法直接更改该类,因此需要使用静态方法编写实用程序类。这个任务在 Kotlin 中使用扩展函数和/或属性完美地解决了。


推荐阅读