生成 LabelledGeneric 时如何访问字段上的注释?

How can you access annotations on a field when generating LabelledGeneric?

有没有办法用有关字段注释的信息来标记生成的无形LabelledGeneric

例如

case class Example(@someAnnotation foo: Foo, bar: Bar)

我们能得到类似的东西吗

FieldType["foo" with Annotations(someAnnotation :: HNil), Foo] :: FieldType["bar", Bar] :: HNil

?

您可以使用类型 类 shapeless.LabelledGenericshapeless.Annotations

来拥有 HLists FieldType['foo, Foo] :: FieldType['bar, Bar] :: HNilSome[someAnnotation] :: None.type :: HNil
implicitly[LabelledGeneric.Aux[Example,
  FieldType[Witness.`'foo`.T, Foo] :: FieldType[Witness.`'bar`.T, Bar] :: HNil]]

implicitly[Annotations.Aux[someAnnotation, Example,
  Some[someAnnotation] :: None.type :: HNil]]

请注意 'foo'bar(由于技术原因写成 Witness.`'foo`.TWitness.`'bar`.T)是单例类型,是 Symbol 的子类型,不是 String.

如果您确实需要交集 (with) 或元组 (fieldName, annotation) 的 HList,那么您可以使用 类 shapeless.ops.hlist.Zipshapeless.ops.hlist.ZipOne, shapeless.ops.hlist.ZipWith.