【发布时间】:2012-01-30 08:10:29
【问题描述】:
应用程序 A 使用这个 proto 文件
message The_message
{
enum The_enum
{
one = 1;
two = 2;
}
required The_enum the_enum = 1;
}
应用程序 B 使用文件的下一个版本。类似,只是多了一个枚举字段
three = 3;
如果应用程序 B 使用 three 枚举向应用程序 A 发送消息会发生什么?
如果您尝试提供不同的值,解析器会将其视为未知字段
所以枚举three 成为一个未知字段。如果the_enum 是可选的,那会很好,但它是必填字段。
应用程序 A 能否正确解析消息?
枚举不应该以这种方式扩展吗?
【问题讨论】:
-
C# 和 C++ 的答案可能会有所不同,不过我不了解 Java。
-
在 Java 中大概是
null,因为枚举是真正的对象。 (从未使用过协议缓冲区。) -
你试过了吗?文档不清楚,所以我会认为这是“自己尝试一下,看看会发生什么”,尽管它可能会导致@StephenC 的回答如下。
-
@M.Babcock 我的特定用例是 C++ 和 C# 应用程序相互通信。但它没有理由不能与 Java 应用程序对话。我正在寻找协议的行为,而不是特定实现的行为。它可能是未定义的,这很好(我知道我不能可移植地扩展所需的枚举定义)。
标签: java c++ protocol-buffers