首页 文章

在Kotlin中设置Guice绑定

提问于
浏览
2

我想设置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 回答

  • 3

    最简单的方法是:

    bind(javaClass<CrashLogger>())!!.to(javaClass<ConcreteCrashLogger>())
    

    你也可以对类型绑定返回显式强制转换或在Guice上运行KAnnotator .

  • 3

    我对此代码有同样的问题,但在我的情况下,无论我做什么,我都无法在Intellij IDEA 2016中导入函数kotlin.jvm.javaClass . 所以我通过以下方式解决问题:

    bind(CrashLogger::class.java).to(ConcreteCrashLogger::class.java)

    // kotlin version ='1.0.6'

相关问题