gpt4 book ai didi

Scala - 在通用接口(interface)上使用 guice multibinder 失败

转载 作者:行者123 更新时间:2023-12-01 15:24:28 27 4
gpt4 key购买 nike

我有以下界面:

trait Subject[T] {
def fetch() :Future[Option[T]]
}

和类:

class ChildSubject@Inject()(dao:Dao) extends Subject[String]{
def fetch(): Future[Option[String]] ={
dao.find("10").map{ name => Some(name)
}
}

还有一个模块:

class SubjectModule extends AbstractModule with ScalaModule{
override def configure(): Unit = {
val subMulti = ScalaMultibinder.newSetBinder[Subject](binder)
subMulti.addBinding.to[ChildSubject]
}
}

然后我尝试注入(inject)这个集合:

@Singleton
class SomeClass @Inject()(subjects: Set[Subject]){
subjects.map{
//do somthing
}
}

我收到以下错误:

play.sbt.PlayExceptions$CompilationException: Compilation error[kinds    
of the type arguments (com.test.Subject) do not conform to the expected
kinds of the type parameters (type T).
com.test.Subject's type parameters do not match type T's expected
parameters:
trait Subject has one type parameter, but type T has none]

有什么想法吗?谢谢!

最佳答案

你需要一个new TypeLiteral<Subject<String>>()用于绑定(bind) - 通用类型接口(interface),如 Subject<T>在 Java 的 Guice 中。 Scala 很可能需要某种形式的相同内容。

这样的事情可能会起作用:

class SubjectModule extends AbstractModule with ScalaModule{
override def configure(): Unit = {
val subMulti = ScalaMultibinder.newSetBinder[Subject[String]](binder)
subMulti.addBinding.to[ChildSubject]
}
}

关于Scala - 在通用接口(interface)上使用 guice multibinder 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677922/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com