我想设置Guice绑定,所以我用Java创建了一个完美的模块:
public class CrashLoggerModule extends AbstractModule {
@Override
public void configure() {
bind(CrashLogger.class).to(ConcreteCrashLogger.class);
}
}
然后我将此代码转换为Kotlin:
public class CrashLoggerModule : AbstractModule() {
override fun configure() {
bind(javaClass<CrashLogger>()).to(javaClass<ConcreteCrashLogger>())
}
}
不幸的是,这个类的Kotlin版本不再适用了 . 发生这种情况是因为Kotlin调用其内部方法 public fun <A, B> A.to(that: B): Pair<A, B>
而不是 LinkedBindingBuilder<T>.to(Class<? extends T> c)
,这导致Guice绑定未正确设置 .
如何明确指定我要使用类方法而不是扩展函数?
2 回答
最简单的方法是:
你也可以对类型绑定返回显式强制转换或在Guice上运行KAnnotator .
我对此代码有同样的问题,但在我的情况下,无论我做什么,我都无法在Intellij IDEA 2016中导入函数kotlin.jvm.javaClass . 所以我通过以下方式解决问题:
bind(CrashLogger::class.java).to(ConcreteCrashLogger::class.java)
// kotlin version ='1.0.6'