作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 com.google.inject.multibindings.Multibinder
时,我对泛型有点困惑如下:
interface MessageParser<S, T> {
fun accept(msg: S): Boolean
fun parser(msg: S): T
}
class Parser1 : MessageParser<Mime, Parsed>
class Parser2 : MessageParser<Mime, Parsed>
class EmailModule : AbstractModule() {
override fun configure() {
val parsers = Multibinder.newSetBinder(binder(), MessageParser::class.java)
parsers.addBinding().to(Parser1::class.java)
parsers.addBinding().to(Parser2::class.java)
}
}
val parsers: MessageParser<Mime, Parsed> =
Multibinder.newSetBinder(binder(), MessageParser<Mime, Parsed>::class.java)
Only classes are allowed on the left hand side of a class literal
最佳答案
使用 TypeLiteral
而不是类文字来注入(inject)具有泛型类型( https://github.com/google/guice/wiki/FrequentlyAskedQuestions#how-to-inject-class-with-generic-type )的类。见 Multibinding with generics对于 Java 示例。下面是等效的 Kotlin 示例。
val parsers = Multibinder.newSetBinder(binder(), object : TypeLiteral<MessageParser<Mime, Parsed>>() {})
关于generics - 在 Multibinder 的泛型中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37393364/
我是一名优秀的程序员,十分优秀!