我有一个类,它包含并展开一个泛型类(以便包含不同的泛型类型实例的列表):
trait XFun [P,V] {
def apply(args: P): V
}
class XRoute (val handler: XFun[_,_])
class XRoutes (val routes: List[XRoute])
因此,当我创建xroutes时,它可以包含具有不同通用类型的xfun列表:
val routes = new XRoutes (List[XRoute](new XRoute(new XFun[Int,Int] {
def apply[Int,Int](args: Int) = 0
}), new XRoute(new XFun[String, String] {
def apply[String, String](args: String) = ""
}
))
但是,当我尝试调用它时,它会导致问题:
def parse(str: String) : Any = {/* impl */}
val inputObj = parse(inputString)
val outputObj = routes(1).handler.apply(inputObj)
这会在应用行上产生错误:
Type mismatch, expected: _$1, actual: Any
目前我唯一的解决方案是从
MethodSymbol
和呼叫使用
reflectedMethod
但是我如何在没有思考的情况下实现这一点呢?
注意我不想改变
XFun
到
apply(Any):Any
因为我想在前端输入强制(例如,当创建xroute对象时,我想这样做
XFun[String,String]
而不是必须这么做
XFun[Any,Any]
)