正如标题所说,我想尝试使用Google协议缓冲区,但却无法编译来自.proto文件的类。我不确定生成的类应该怎么样,并且它包含2500行是正常的。
这是maven项目,我已经包含了以下依赖项:
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.6.1</version>
</dependency>
和protoc.exe与.proto文件在同一目录中。
我正在关注google docs中的示例,但是当我尝试编译addressbook.proto
时,生成的类有超过2500行和未使用的字段,例如:int mutable_bitField0_ = 0;
生成的代码对我来说非常奇怪,里面有这样的东西:
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
public com.google.protobuf.ExtensionRegistry assignDescriptors(
com.google.protobuf.Descriptors.FileDescriptor root) {
descriptor = root;
return null;
}
生成的类应该是这样还是我做错了?
作为一个注释,使用的java版本是8。
答案 0 :(得分:3)
是的,生成的代码非常大且非常难看。这是生成代码的典型情况。 .proto
文件中的每个字段声明变成了六个或更多的方法,每个方法都有几行,加上序列化,解析,清除等的代码行。对于protobuf生成的代码,2500行实际上非常小。
代码生成器不是很聪明 - 它基本上是一堆打印语句 - 所以它经常产生丑陋的代码,有时它甚至会生成它最终没有使用的样板。
您真的不希望看到生成的代码。 :)