如果需要但不在范围内,那么枚举的价值是多少?

时间:2011-12-30 03:11:24

标签: java c++ protocol-buffers

应用程序A使用此原型文件

message The_message
{
   enum The_enum
   {
      one = 1;
      two = 2;
   }

   required The_enum the_enum = 1;
}

应用程序B使用该文件的下一个版本。除了它还有一个枚举字段

之外,它是相似的
three = 3;

如果应用程序B使用three enum?

向应用程序A发送消息,会发生什么?

protobuf documentation

  

如果您尝试提供不同的值,解析器会将其视为未知字段

因此枚举three成为一个未知领域。如果the_enum是可选的,那么这将是正常的,但它是必填字段 应用程序A是否能够正确解析消息?
枚举是不是应该以这种方式扩展?

1 个答案:

答案 0 :(得分:3)

我希望解析器的行为方式与遇到缺少required字段的消息的方式相同。我希望解析器拒绝该消息。

您链接的页面说明了这一点:

  

必需永远 - 您应该非常小心地根据需要标记字段。如果您希望在某个时刻停止写入或发送必填字段,则将字段更改为可选字段会有问题 - 旧读者会认为没有此字段的邮件不完整,可能会无意中拒绝或丢弃它们。

现在这不完全是您所讨论的情况,但它暗示缺少必需的消息将导致消息不被接受。


如果枚举字段不是required,则文档暗示该字段将被视为未知字段。如果您使用的是支持它的protobuf API版本,则可以访问此字段/值,但您会将其视为字节或其他内容,而不是映射的Java或C#enum类型。