【发布时间】:2020-05-05 01:49:22
【问题描述】:
我需要构造一个大的HashMap,但是我不想手动将每个值输入到map中,这里是一个例子。
val codecs = HashMap(
"Foo" -> deriveEncoder[Foo],
"Bar" -> deriveEncoder[Bar],
"Qux" -> deriveEncoder[Qux],
)
deriveEncoder 是一个接受单个类型参数的函数。理想情况下,我想要以下内容:
val concreteClasses = List(Foo, Bar, Qux)
concreteClasses.foreach(T => codecs.put(T.name, deriveEncoder[T]))
这是不可能的,但什么是合理的替代方案?
原因还在于它允许在对象构造期间传入类型列表,从而将实际类型与包含类本身的实现解耦。
谢谢
【问题讨论】:
-
deriveEncoder的定义是什么? -
@Dima 在 Circe 图书馆。 final def derivedEncoder[A](隐式编码: Lazy[DerivedAsObjectEncoder[A]]): Encoder.AsObject[A] = encode.value
-
你有什么理由想要编解码器的地图吗?
标签: scala foreach types implicit