在Kotlin中设置Guice绑定
我想设置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绑定没有正确设置。
我怎样才能明确指出,我想使用类方法,而不是扩展功能?
最简单的方法是:
bind(javaClass<CrashLogger>())!!.to(javaClass<ConcreteCrashLogger>())
你也可以做一个显式的强制类型转换,或者在Guice上运行KAnnotator。
我对这个代码有同样的问题,但在我的情况下,我不能在Intellij IDEA 2016中导入函数kotlin.jvm.javaClass,无论我做什么。 所以我按以下方式解决问题:
bind(CrashLogger::class.java).to(ConcreteCrashLogger::class.java)
// kotlin version ='1.0.6'