【发布时间】:2019-02-17 21:55:58
【问题描述】:
我的 API 上公开了一个方法,如下所示:
def read[T](implicit decoder: Decoder[T]): T
用户可以携带任何他们喜欢的T,我的代码会尝试将json结果解析为T。
我要解决的问题是任何用户还必须导入 io.circe.generic.auto._ 才能使其正常工作并自动派生 Decoder[T]。
有什么方法可以更改我的 API 以避免用户必须进行此导入?
【问题讨论】:
-
您的描述不太正确。用户不能带任何
T,他们只能带一个T,其中有Decoder[T]类型的隐式值。重要的是,用户要知道这取决于circe库,而不是您的代码,所以他们需要拥有import是很好的。 -
同意@Tim,但还要注意,使用
io.circe.generic.auto可能会导致奇怪的副作用:每次尝试解决新的隐含问题时,它都会生成 Decoder[T]范围,因此您可以为每个需要implicit decoder: Decoder[T]的方法使用单独的解码器实例