如何在T或Future [T]上下文中返回一个函数?

时间:2018-06-06 21:45:25

标签: scala

目前我有一个功能需要contentTypeinputObject,并根据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]取回结果,只需要得到结果。

0 个答案:

没有答案