A previous question показывает, как поставить статический инициализатор внутри класса, используя его companion object
. Я пытаюсь найти способ добавить статический инициализатор на уровне пакета, но, похоже, у пакетов нет сопутствующего объекта.Как написать статический инициализатор уровня пакета в Котлине?
// compiler error: Modifier 'companion' is not applicable inside 'file'
companion object { init { println("Loaded!") } }
fun main(args: Array<String>) { println("run!") }
Я пробовал другие варианты, которые, возможно, уже имело смысл (init
сам по себе, static
), и я знаю, как обходной путь я могу использовать одноразовые val
как в
val static_init = {
println("ugly workaround")
}()
но есть ли чистый, официальный способ добиться того же результата?
Edit: Как @mfulton26's answer упоминает, что нет такого понятия, как функция уровня пакета действительно в JVM. За кулисами компилятор kotlin - wrapping any free functions, including main
in a class. Я пытаюсь добавить статический инициализатор в , что класс - класс, создаваемый kotlin для бесплатных функций, объявленных в файле.
Почему бы не использовать 'main' для инициализации? – mfulton26
Потому что я выбрал плохой пример с игрушкой. Представьте себе файл, полный связанных свободных функций, которые зависят от некоторой общей инициализации. Возможно, я мог бы просто обернуть их в названный «объект», но большая красота котлина, как правило, не вынуждена делать подобные вещи. – Dan
Получил. К сожалению, я не знаю, как это сделать, кроме вашего обходного пути или варианта. например 'val static_init = run {println (" обходной путь ")}' или 'val static_init = object {init {println (" обходной путь ")}}'. – mfulton26