【问题标题】:Inject constructor and companion object注入构造函数和伴随对象
【发布时间】:2017-05-12 19:25:06
【问题描述】:

我是 Kotlin 的新手,我正在尝试注入一个值(在此示例中,它只是一个 Int,但在实际代码中,它是一个 Provider 类) 我在这里做错了什么?为什么 x 是一个未解析的引用?

class Test
@Inject constructor(private val x: Int) {

companion object {
    var y: Int = 0

        @BeforeClass @JvmStatic
        fun beforeClass() {
            y = x * 2
        }
    }
}

【问题讨论】:

    标签: java junit kotlin guice rx-kotlin


    【解决方案1】:

    伴随对象是与相关联的静态对象,而不是类的实例。

    class Foo(val bar: Baz) {
        companion object {}
    }
    

    类似于Java中的以下代码:

    class Foo {
        static class Companion { }
        static final Foo.Companion Companion = new Foo.Companion();
    
        final Baz bar;
        Foo(Baz bar) { this.bar = bar; }
    }
    

    这就是为什么x不在伴生对象的变量范围内,就像你不能从静态类Companion访问bar字段一样。您的属性y 实际上是Test.Companion 类中的一个字段。

    我不确定你想用BeforeClass 做什么,因为我不熟悉它。希望我的回答对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多