В настоящее время мы переключаем наш проект на Kotlin и натолкнулись на следующий вопрос:
Нам нужна определенная функция расширения только внутри данного класса.Таким образом, у нас есть две возможности: (1) Объявление функции расширения private
на верхнем уровне файла или (2) Объявление функции расширения private
внутри класса.
После MCVE:
Пример верхнего уровня (файл C1.kt
):
private fun String.double() = this.repeat(2)
class C1 {
init {
println("init".double())
}
}
Пример внутреннего класса (файл C2.kt
):
class C2 {
private fun String.double() = this.repeat(2)
init {
println("init".double())
}
}
Вопросы:
Есть ли разница между этими двумя подходами, за исключением того, что в C1.kt
функция расширения String.double()
также будет видна другим возможным элементам файла (например, дополнительные классы в том же файле)?
Поскольку мы хотим получить код "как можно более котлиническим", нам хотелось бы знать, какой из двух подходов является предложенным.Есть ли официальное предложение / руководство по стилю на приведенном выше примере?Я думаю, что считается хорошей практикой объявлять функции расширения как можно ближе к предполагаемому использованию, поэтому в приведенном выше примере будет предложена структура C2
?