有一个密封的特征DataTag及其子类型(86个case类)。将项目升级到scala 2.12、scodec-core 1.11.8和scodec-bits 1.1.27后,编译失败,出现以下错误
[error] Method too large: protocol/Payload/BasePacket$.tagCodec ()Lscodec/Codec;
此方法调用此错误:
implicit def tagCodec: Codec[DataTag] = Codec.coproduct[DataTag].auto
有没有其他方法可以生成包含大量子类型的编解码器?
我尝试使用“基于键的鉴别器”示例(https://github.com/scodec/scodec/blob/series/1.11.x/unitTests/src/test/scala/scodec/examples/CoproductsExample.scala),但结果是相同的。
附言:我在github(https://github.com/scodec/scodec/issues/324)上提出了一个问题,但还没有人回复。
发布于 2021-11-15 14:27:28
问题解决了。编解码器编写,通过.typecase(discriminator, codec)指定来自子类型сompanion对象的所有编解码器。这很难看,但很管用。
https://stackoverflow.com/questions/68575180
复制相似问题