我已经读过,在proto3中,他们已经删除了知道字段是否设置的能力。作为一个解决方案,我已经在几个站点中阅读过,您可以将原语嵌入到包装器消息中。
正如您所看到的here,protobuf在wrappers.proto下面有一些内部包,以便完全按照我的需要进行操作。
我可以将这个wrappers.proto文件复制并粘贴到我的系统中,然后从另一个文件A.proto中导入它以使用它们。
但我不知道:
使用内部包装是否是一个不错的选择?
如果是这样,我可以直接从他们的jar导入而不是创建我自己的文件副本吗?
(我尝试使用他们的jar目录导入,但没有用)
import "lib/protobuf-java-3.5.0.jar/com/protobuf/wrappers.proto"; --> fails
,同时:
import "resources/protoBeans/wrappers.proto"; --> my own copy --> works
答案 0 :(得分:2)
你可以,而且可能最好单独创建它们 - 尽管注意子消息会增加二进制大小和处理的开销,并且与使用{{{0}的proto2消息不兼容。 1}}字段实现同样的事情。 " wrappers.proto"应该已经在protoc的二进制位置下面可用;典型用法可能是:
syntax = "proto3";
import "google/protobuf/wrappers.proto";
message Foo {
.google.protobuf.Int32Value foo = 1;
}
使用" wrappers.proto"的另一个好处。而不是自己重新实现它,它将被视为一个着名的类型"使用定制的JSON处理和更好的"任何"支持。