scala - 如何在 T 或 Future[T] 上下文中返回函数?
问题描述
目前我有一个函数,它需要一个contentType
and 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]
,它只需要获取结果。
解决方案
推荐阅读
- javascript - Fotorama jQuery 图像库未加载到全尺寸
- android - React Native 板扫描不工作。我的手机会读取并扫描车牌问题(Android 没有 64 位库。)
- wordpress - 如何在 WordPress 插件中正确编辑样式
- python-3.x - Azure Databricks:将文件保存在 Azure Datalake 目录文件夹中
- django - 数组中的Django rest框架序列化程序验证错误消息
- firebase - 是否可以在一种风格上使用多个 firebase 项目?
- c++ - (C++) 使用函数的回文数
- django - 计算 django 中过滤查询中的所有类别对象?
- flutter - 如何在构建之前获取小部件的尺寸?
- python - 即使在修改可执行文件后也检测到硒