首页 > 解决方案 > 如何在 T 或 Future[T] 上下文中返回函数?

问题描述

目前我有一个函数,它需要一个contentTypeand 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]or Future[T],它只需要获取结果。

标签: scala

解决方案


推荐阅读