繁体   English   中英

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

[英]Kotlin property not initialized, but why?

我们正在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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM