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 に答える