我已经阅读了proto3中的内容,他们删除了知道是否设置了字段的功能。作为解决方案,我已经阅读了多个站点,您可以将原语嵌入包装消息中。

如您所见,在here下具有一些内部软件包,以完全满足我的需要。

我可以将该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

最佳答案

您可以,最好单独创建它们-尽管请注意,子消息会增加二进制文件大小和处理的开销,并且与使用optional字段来实现一样。 “ wrappers.proto”应该已经在protoc的二进制位置下可用;典型用法可能是:

syntax = "proto3";
import "google/protobuf/wrappers.proto";

message Foo {
    .google.protobuf.Int32Value foo = 1;
}


使用“ wrappers.proto”而不是自己重新实现的另一个好处是,它将通过定制的JSON处理和更好的“ any”支持被视为“知名类型”。

10-07 16:53