0

具有密封特征 DataTag 及其子类型(86 个案例类)。将项目升级到 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),但是结果是一样的。

PS:我在github上发了一个issue(https://github.com/scodec/scodec/issues/324),但是还没人回答。

4

1 回答 1

0

问题解决了。Codec 写道,指定从子类型 сompanion 对象到.typecase(discriminator, codec). 这很丑陋,但有效。

于 2021-11-15T14:27:28.460 回答