使用 shapeless 获取案例类字段的名称和类型 [英] Get case class field's name and type with shapeless
本文介绍了使用 shapeless 获取案例类字段的名称和类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以通过shapeless获取scala case类字段的名称和类型?
Is it possible to get scala case class field's names and types with shapeless?
我试过这样(T是case类):
I've tried like this (T is case class):
trait Cpo[T] {
def withPrimaryKey[R <: HList, K, V <: HList](f: Seq[Symbol] => Seq[Symbol])(
implicit labellGeneric: LabelledGeneric.Aux[T, R], keys: Keys.Aux[R, K],
ktl: hlist.ToList[K, Symbol]): Cpo[T]
}
但我只能得到字段的名称.
but I only can get field's name.
Zlaja
推荐答案
尝试
object typeablePoly extends Poly1 {
implicit def default[A](implicit typeable: Typeable[A]): Case.Aux[A, String] = at(_ => typeable.describe)
}
trait Cpo[T] {
def withPrimaryKey[R <: HList, K <: HList, V <: HList, V1 <: HList](f: Seq[Symbol] => Seq[Symbol])(implicit
labellGeneric: LabelledGeneric.Aux[T, R],
keys: Keys.Aux[R, K],
ktl: hlist.ToList[K, Symbol],
values: Values.Aux[R, V],
mapper: hlist.Mapper.Aux[typeablePoly.type, V, V1],
vtl: hlist.ToList[V1, String]
): Cpo[T]
}
现在 ktl
给出字段名称列表(如 Symbol
s),vtl
给出字段类型列表(如 String
s).
Now ktl
gives list of field names (as Symbol
s) and vtl
gives list of field types (as String
s).
试试
object typeablePoly extends Poly1 {
implicit def default[A](implicit typeable: Typeable[A]): Case.Aux[A, String] = at(_ => typeable.describe)
}
object nullPoly extends Poly0 {
implicit def default[A]: ProductCase.Aux[HNil, A] = at(null.asInstanceOf[A])
}
trait Cpo[T] {
def withPrimaryKey[R <: HList, K <: HList, V <: HList, V1 <: HList](f: Seq[Symbol] => Seq[Symbol])(implicit
labellGeneric: LabelledGeneric.Aux[T, R],
keys: Keys.Aux[R, K],
ktl: hlist.ToList[K, Symbol],
values: Values.Aux[R, V],
mapper: hlist.Mapper.Aux[typeablePoly.type, V, V1],
fillWith: hlist.FillWith[nullPoly.type, V],
vtl: hlist.ToList[V1, String]
): Cpo[T] = {
println(ktl(keys())) // List('i, 's)
println(vtl(mapper(fillWith()))) // List(Int, String)
???
}
}
case class MyClass(i: Int, s: String)
new Cpo[MyClass] {}.withPrimaryKey(identity)
这篇关于使用 shapeless 获取案例类字段的名称和类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文