【问题标题】: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 做什么,因为我不熟悉它。希望我的回答对您有所帮助。