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 绑定没有正确设置。

如何明确指定我要使用类方法而不是扩展函数?

4

2 回答 2

4

最简单的方法是:

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

您还可以对类型绑定返回进行显式转换或在 Guice 上运行 KAnnotator。

于 2014-07-04T08:56:25.603 回答
4

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

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

//kotlin 版本 = '1.0.6'

于 2017-02-19T18:51:19.157 回答