eva*_*ad3 7 generics dependency-injection guice kotlin
我有一个场景,我有一个通用接口,并希望在 Guice 中绑定该接口的多个实现。通常在 Java 中这意味着 TypeLiterals,在 Kotlin 中这将如何完成?
bind(TypeLiteral<Resolver<RealObject>>(){}).to(RealResolver::class.java)
Run Code Online (Sandbox Code Playgroud)
这给出了以下编译器错误:
cannot access <init>: it is public/*package*/ in 'TypeLiteral'
有一个 TypeLiteral.get() 方法,但我似乎也无法让它工作
new TypeLiteral<Resolver<RealObject>>(){}您应该使用 Kotlin对象表达式而不是 Java 匿名类语法 ( ) :
bind(object : TypeLiteral<Resolver<RealObject>>() { }).to(RealResolver::class.java)
Run Code Online (Sandbox Code Playgroud)
您可以将其包装到带有具体化类型参数的内联函数中:
inline fun <reified T> typeLiteral() = object : TypeLiteral<T>() { }
Run Code Online (Sandbox Code Playgroud)
然后将其用作:
bind(typeLiteral<Resolver<RealObject>>()).to(RealResolver::class.java)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |