【发布时间】:2015-11-21 06:47:25
【问题描述】:
作为一个练习,我想看看我是否可以使用 List[Any] 并使用 shapeless 将其“投射”到案例类中。
我正在努力实现的一个非常基本的示例:
case class Foo(i: Int, j: String)
val foo: Option[Foo] = fromListToCaseClass[Foo]( List(1:Any, "hi":Any) )
这是我正在制定我的解决方案的方式(这可能是完全不同的):
def fromListToCaseClass[CC <: Product](a: List[Any]): Option[CC] = a.toHList[???].map( x => Generic[CC].from(x) )
这是我的推理:
我知道你可以从一个案例类转到一个 HList[T] (CC -> HList[T]);其中 T 是 HList 的类型。我也知道,只要您知道 HList 的类型,就可以从列表 (list -> Option[HList]) 创建 HList。最后我知道您可以从 HList 转到案例类(HList -> CC)。
CC -> HList[T]
list -> Option[HList[T]] -> Option[CC]
我想知道这是否有意义,或者我是否离这里很远。我们可以完成这项工作吗?还有其他建议吗?谢谢!
【问题讨论】: