gpt4 book ai didi

java - Kotlin 属性未初始化,但为什么呢?

转载 作者:行者123 更新时间:2023-12-02 01:23:36 25 4
gpt4 key购买 nike

我们正在用 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 时初始化包属性。但测试失败了。我忽略了什么?

最佳答案

您需要从测试中直接或间接引用与 val myObject 相同的文件中定义的某物。否则它生成的类将不会被加载。例如

@Test
public void testMyObjectLoaded() {
your.package.FileNameKt.getMyObject();
Assert.assertEquals(1, Dsl.Companion.getStored().size);
}

关于java - Kotlin 属性未初始化,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com