协议缓冲区的一个吸引人的功能是它允许您扩展消息定义,而不会破坏使用旧定义的代码.在根据文档的枚举的情况下:
具有枚举类型的字段只能将一组指定的常量作为其值(如果您尝试提供不同的值,则解析器会将其视为未知字段)
因此,如果扩展枚举并使用新值,则旧代码中具有该类型的字段将是未定义的,或者具有其默认值(如果有).
什么是处理这个问题的好策略,知道将来enum可能会增加额外的值?
想到的一种方法是定义枚举的"未定义"成员并使其成为默认值,然后旧代码将知道它已被发送无法解释的内容.这是明智的,有没有更好的方法来处理这种情况?
poo*_*lie 22
是的,最好的方法是使枚举中的第一个值类似UNKNOWN = 0.然后读取具有枚举值的原始程序的旧程序将无法识别,UNKNOWN并希望它们可以合理地处理,例如跳过该元素.
如果你想这样做,你也想使枚举是optional不是required.
required通常,意思是"我宁愿程序只是中止而不是处理它不理解的东西."
请注意,它必须是原始源中声明的第一个值 - 只是零值不会使其成为默认值.
至少在proto3的java实现中,它创建了一个默认值。该值将从"UNKNOWN_ENUM_VALUE_"
代码参考:
| 归档时间: |
|
| 查看次数: |
10113 次 |
| 最近记录: |