应用程序A使用此原型文件
message The_message
{
enum The_enum
{
one = 1;
two = 2;
}
required The_enum the_enum = 1;
}
应用程序B使用该文件的下一个版本。除了它还有一个枚举字段
之外,它是相似的three = 3;
如果应用程序B使用three
enum?
如果您尝试提供不同的值,解析器会将其视为未知字段
因此枚举three
成为一个未知领域。如果the_enum
是可选的,那么这将是正常的,但它是必填字段
应用程序A是否能够正确解析消息?
枚举是不是应该以这种方式扩展?
答案 0 :(得分:3)
我希望解析器的行为方式与遇到缺少required
字段的消息的方式相同。我希望解析器拒绝该消息。
您链接的页面说明了这一点:
必需永远 - 您应该非常小心地根据需要标记字段。如果您希望在某个时刻停止写入或发送必填字段,则将字段更改为可选字段会有问题 - 旧读者会认为没有此字段的邮件不完整,可能会无意中拒绝或丢弃它们。
现在这不完全是您所讨论的情况,但它暗示缺少必需的消息将导致消息不被接受。
如果枚举字段不是required
,则文档暗示该字段将被视为未知字段。如果您使用的是支持它的protobuf API版本,则可以访问此字段/值,但您会将其视为字节或其他内容,而不是映射的Java或C#enum
类型。