如何在 Kotlin 的类之外定义静态 init 块?

Art*_*nov 1 arraylist kotlin

我有实用程序文件Utility.kt

在这里,我定义了一些常量,例如

val DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd")
const val UTC_TIMEZONE = "UTC"
Run Code Online (Sandbox Code Playgroud)

现在我需要用 2 个元素定义列表。我找不到以静态方式编写它的方法。我需要类似的东西

val DEFAULT_LIST = ArrayList<MyObj>()
val one = MyObj("one")
val two = MyObj("two")
DEFAULT_LIST.addAll(one,two)
Run Code Online (Sandbox Code Playgroud)

即只创建一次列表和对象。我可以使用伴侣对象。但现在我只使用没有类的文件。

是否可以?

Mar*_*nik 5

最通用的解决方案是调用run,它不接受任何参数并产生作为块结果的值。对您的代码进行最少的更改:

val DEFAULT_LIST = run {
    val it = ArrayList<MyObj>()
    val one = MyObj("one")
    val two = MyObj("two")
    it.add(one)
    it.add(two)
    it
}
Run Code Online (Sandbox Code Playgroud)