首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kotlin属性没有初始化,但为什么?

Kotlin属性没有初始化,但为什么?
EN

Stack Overflow用户
提问于 2019-07-31 08:36:56
回答 1查看 114关注 0票数 0

我们正在Kotlin写一个内部DSL。然后从Java代码中使用它。我们看到DSL中定义的对象还不可用。因此,问题是:为什么没有初始化包属性?

因此,简化的情况是:

代码语言:javascript
运行
复制
val myObject = dsl {
    ...
}

DSL:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
public class ExpectMyObject {
    @Test
    public void testMyObjectLoaded() {
        Assert.assertEquals(1, Dsl.Companion.getStored().size)
    }
}

我期望在启动JVM时初始化package属性。但测试失败了。我在看什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-31 08:42:32

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

代码语言:javascript
运行
复制
@Test
public void testMyObjectLoaded() {
    your.package.FileNameKt.getMyObject();
    Assert.assertEquals(1, Dsl.Companion.getStored().size);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57286535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档