我们正在用 Kotlin 编写内部 DSL。然后我们从我们的 Java 代码中使用它。我们看到 DSL 中定义的对象还不可用。因此问题是:为什么包属性没有初始化?
简化的情况是这样的:
val myObject = dsl {
...
}
和 DSL:
class Dsl() {
companion object {
val stored = mutableListOf<Dsl>()
fun add(added: Dsl) {
stored += added
}
}
}
fun dsl(init: Dsl.() -> Unit) {
val dsl = Dsl()
dsl.init()
Dsl.add(dsl) // Intentional side effect to simplify DSL definition
}
使用 Java 中的 DSL:
public class ExpectMyObject {
@Test
public void testMyObjectLoaded() {
Assert.assertEquals(1, Dsl.Companion.getStored().size)
}
}
我希望在启动 JVM 时初始化包属性。但是测试失败了。我在看什么?