目前我有一个功能需要contentType
和inputObject
,并根据contentType
返回输出,非常标准的东西:
class ObjectMapper {
def mapInputObject(contentType: String, input: InputObject): OutputObject {
contentType match {
case "A": mapToOutputA(input)
case "B": mapToOutputB(input)
}
}
private def mapToOutputA(input: InputObject): OutputObject = ???
private def mapToOutputB(input: InputObject): OutputObject = ???
}
我认为私有函数会更好,如果他们改为分开类,但无论如何它到目前为止都有效。但是,现在我们有一个新的contentType
,只能在将来映射:
def mapToOutputC(input: InputObject): Future[OutputObject] = ???
来电者只知道contentType
,它不知道或不关心输出是立即还是未来,我试图使用更高级的类型,但卡住了甚至不确定它是否是正确的方法:
object Context {
type Id[X] = X
}
import Context.Id
trait ObjectMapperFunc[C[_]] {
def mapFunc(input: InputObject): C[OutputObject]
}
object OutputAMapperFunc extends ObjectMapperFunc[Id] {
override def mapFunc(input: InputObject): Id[OutputObject] = ???
}
class OutputCMapperFunc extends ObjectMapperFunc[Future] {
override def mapSync(input: InputObject): Future[OutputObject] = ???
}
class ObjectMapper {
def mapInputObject(contentType: String, input: InputObject): ObjectMapperFunc[_] = {
contentType match {
case "A": OutputAMapperFunc
case "C": new OutputCMapperFunc
}
}
}
代码没有编译,它说ObjectMapperFunc [_],_ $ 1没有类型参数,预期:一个
解决这个问题的最佳方法是什么?来电者并不关心它是以Id[T]
还是Future[T]
取回结果,只需要得到结果。