Protobuf中的默认枚举值是多少?

why*_*why 14 java protocol-buffers

Hello使用Java的Google协议缓冲区中的默认枚举值(如果没有定义任何默认值)是什么?

Mar*_*ell 16

它是.proto命令中定义的第一个.

从.proto语言指南(因为所有实现在这里使用相同的逻辑):

可选字段和默认值

(snip)对于枚举,默认值是枚举类型定义中列出的第一个值.

  • 因此,让第一个为零并且意味着"未知"之类的东西是个好主意. (2认同)

dcn*_*dcn 6

来自官方规格

可选:该字段可以设置也可以不设置。如果未设置可选字段值,则使用默认值。对于简单类型,您可以指定自己的默认值,就像我们在示例中为电话号码类型所做的那样。否则,使用系统默认值:数字类型为零,字符串为空字符串,布尔值为 false。对于嵌入消息,默认值始终是消息的“默认实例”或“原型”,其未设置任何字段。调用访问器来获取尚未显式设置的可选(或必需)字段的值始终返回该字段的默认值。

您可以按如下方式设置默认值:

optional PhoneType type = 2 [default = HOME];
Run Code Online (Sandbox Code Playgroud)