Я спрашиваю себя, почему 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, но я думаю, что будет немного больше.
companion object
может получать функции расширения, а также реализовывать интерфейсы. - person EpicPandaForce   schedule 10.03.2020