Java 什么';s是一个枚举';如果为';需要,但不在范围内?

Java 什么';s是一个枚举';如果为';需要,但不在范围内?,java,c++,protocol-buffers,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使用threeenum向应用程序a发送消息,会发生什么情况 警察说 如果您试图提供不同的值,解析器会将其视为未知字段 因此,枚举

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

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

   required The_enum the_enum = 1;
}
应用程序B使用文件的下一个版本。除了它还有一个枚举字段外,它与此类似

three = 3;
如果应用程序B使用
three
enum向应用程序a发送消息,会发生什么情况

警察说

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

因此,枚举
three
成为未知字段。如果_enum是可选的,但它是一个必填字段,那么这将很好。
应用程序A能否正确解析消息?

枚举不应该以这种方式扩展吗?

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

您链接到的页面显示:

必填字段永远是-您应该非常小心地根据需要标记字段。如果在某个时候,你希望停止写或发送一个必填字段,那么将字段转换成一个可选字段将是个问题。老读者会考虑没有这个字段的信息是不完整的,并且可能会无意地拒绝或丢弃它们。 现在,这并不完全是您正在讨论的场景,但它意味着缺少必需的消息将导致消息不被接受



如果枚举类型的字段不是
必需的
,则文档表明该字段将被视为未知字段。如果你使用支持它的原BoFAPI版本,你可以访问这个字段/值,但是你可以把它看作是字节或某物,而不是映射的java或C>代码> EnUM< /Cuff>类型。< /P> C++和C++之间的答案可能不同,但我不知道java。在爪哇,大概是代码> null < /Cube >。因为枚举是真正的对象。(从未使用协议缓冲区)您尝试过吗?文档不清楚,所以我将其视为“自己尝试,看看会发生什么”,尽管它可能会导致C++的答案。但它没有理由不能与Java应用程序通信。我在寻找协议的行为,而不是特定实现的行为。它可能未定义,这很好(我知道我无法移植扩展所需的枚举定义)。相关: