我想设置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绑定未正确设置。
如何明确指定我想使用类方法而不是扩展函数?
答案 0 :(得分:3)
最简单的方法是:
bind(javaClass<CrashLogger>())!!.to(javaClass<ConcreteCrashLogger>())
你也可以对bind类型进行显式强制转换,或者在Guice上运行KAnnotator。
答案 1 :(得分:3)
我对此代码有同样的问题,但就我而言,无论我做什么,我都无法在Intellij IDEA 2016中导入函数kotlin.jvm.javaClass。所以我通过以下方式解决问题:
bind(CrashLogger::class.java).to(ConcreteCrashLogger::class.java)
// kotlin version ='1.0.6'