为什么protobuf必需/可选字段接受“默认”值,我希望只有“可选”应该

时间:2017-03-02 11:31:05

标签: protocol-buffers

google protobuf允许我编写这样的原型代码:

syntax="proto2";
message hello
{
    optional int32 id=1;
    required string str=2[default="abc"];
    optional int32 op=3 [default=15];
}

它编译,没问题。我不仅仅明白,对于“可选”字段,当没有指定值时,解码流返回默认值,没关系。但是“必需”字段呢,它不能为空,那么它的“默认”如何也有效?在什么情况下?

1 个答案:

答案 0 :(得分:1)

“默认”值是字段尚未设置时字段的getter返回的值。在创建新的消息对象时,最初,没有设置任何字段 - 甚至是必填字段。因此,默认值是getter在您立即调用时将返回的值。

当然,这对于必填字段并不是特别有用,但似乎没有任何理由禁止它。