【发布时间】:2016-10-21 21:36:03
【问题描述】:
我创建了下面的人为示例来展示我想要完成的工作。我正在寻找一个工厂,它将吐出一个类,该类使用它将处理的特定类型的请求进行参数化。我以为我了解泛型,但现在我怀疑自己。 :)
object SourceFactory {
def apply[T <: Source[_ <: RequestContext]](x: String): Source[_ <: RequestContext] = {
x match {
case "a" => new FooSource
}
}
}
object RequestContextFactory {
def apply[T >: RequestContext](x: String): T = {
x match {
case "a" => FooRequestContext()
}
}
}
abstract class RequestContext
case class FooRequestContext() extends RequestContext
abstract class Source[T <: RequestContext] {
def get(ctx: T): Unit
}
class FooSource extends Source[FooRequestContext] {
def get(ctx: FooRequestContext): Unit = {}
}
object Test extends App {
val source = SourceFactory("a")
val ctx = RequestContextFactory("a")
source.get(ctx)
}
结果:
编译器异常错误:第 32 行:类型不匹配; 发现:Evaluator__da15fb805d29b29227bc28ccae6cd07d2c04cb40_1274353927.Test.ctx.type(具有基础类型RequestContext) 需要:_$2 source.get(ctx)
提前感谢您的帮助!
【问题讨论】: