在Kotlin中设置Guice绑定

时间:2014-07-04 08:31:50

标签: guice kotlin extension-function

我想设置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 个答案:

答案 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'