MongoDB:一般使用createCodecProvider

时间:2017-11-16 18:32:32

标签: mongodb scala generics typeclass codec

而不是每个案例类有一个硬编码行

  val codecRegistry = fromRegistries(
    fromProviders(
      classOf[CaseClassNameGoesHere],
      ...
    ),
    ...
    )

我想创建一个可以创建它们的方法。

两个

  def method[T] = {
    Macros.createCodecProvider[T]()
  }

  def method[T: ClassTag] = {
    Macros.createCodecProvider[T]()
  }

...给我scala.ScalaReflectionException:类型T不是类

我希望编译器可以查看此方法的每次调用并执行其操作。

有没有办法实现这个目标?解决方案"遥远的"只要我不必创建classOf的列表,就可以接受这种方法。

1 个答案:

答案 0 :(得分:0)

你最终会得到更多的代码,更复杂的代码,不是吗?当您将classOf[Foo]传递给fromProviders时,实际上只有一个隐含的createCodecProvider需要Class[Foo]并为其创建CodecProvider。无论您如何生成它们,您仍然必须“手动”将所有编解码器提供程序传递到fromProviders。即你仍然会得到类似的东西:

val codecRegistry = fromRegistries(
  fromProviders(
    method[Foo],
    method[Bar],
    ...
  )