在scala中提取类型参数

时间:2016-08-11 14:00:11

标签: scala

我有一段代码匹配案例类,然后根据类型和提取的值调用函数:

def resolveByType[T](ids: List[Any]) = ids map (id => resolver.resolve[T](id))

override def resolve(deferred: Vector[Deferred[Any]], ctx: Any): Vector[Future[Any]] = deferred flatMap {
  case DeferAccounts(ids) => resolveByType[Account](ids)
  case DeferLocations(ids) => resolveByType[Location](ids)
  case DeferDelegates(ids) => resolveByType[EconomicUnit](ids)
  case DeferMUs(ids) => resolveByType[MunicipalUnit](ids)

  case _ =>
    List(Future.fromTry(Try(List[Any]())))
}

案例类定义如下

case class DeferAccounts(accounts: List[String]) extends Deferred[List[Option[Account]]]
case class DeferLocations(loctions: List[String]) extends Deferred[List[Option[Location]]]
case class DeferDelegates(delegates: List[String]) extends Deferred[List[Option[EconomicUnit]]]
case class DeferMUs(delegates: List[String]) extends Deferred[List[Option[MunicipalUnit]]]

如您所见,我需要的只是内部类型参数和列表。我正在试图找出最常用的 scala-y 方法。现在看起来像很多样板代码。是否有一种干净的方式来提取列表并以编程方式输入参数而不是声明性地,因为它现在已经完成,或者这是正确的方法吗?

0 个答案:

没有答案