google protobuf允许我编写这样的原型代码:
syntax="proto2";
message hello
{
optional int32 id=1;
required string str=2[default="abc"];
optional int32 op=3 [default=15];
}
它编译,没问题。我不仅仅明白,对于“可选”字段,当没有指定值时,解码流返回默认值,没关系。但是“必需”字段呢,它不能为空,那么它的“默认”如何也有效?在什么情况下?
答案 0 :(得分:1)
“默认”值是字段尚未设置时字段的getter返回的值。在创建新的消息对象时,最初,没有设置任何字段 - 甚至是必填字段。因此,默认值是getter在您立即调用时将返回的值。
当然,这对于必填字段并不是特别有用,但似乎没有任何理由禁止它。