介绍 .proto Java对象中的方法 methods in interface methods in object methods in Builder 示例
介绍
介绍日后再补TODO,总之想要了解protobuf的工作原理,需要首先知道编程中的“Builder模式”——由于类属性过多而出现的一种较好的解决方式。没有公有构造函数,设置属性仅能通过Builder的set类方法等等。具体可查阅资料学习。
这里介绍一下protobuf生成的Java对象结构。
.proto
假设protobuf定义文件如下:
option java_outer_classname = "Test";
message A {
required string a = 1;
message B1 {
optional string b = 1;
message C {
optional string c = 1;
}
optional C c = 2;
}
optional B1 b1 = 2;
message B2 {
optional int32 b = 1;
}
optional B2 b2 = 3;
optional int32 num = 4;
}
则会生成类名为Test.java的文件,结构和protobuf文件定义的一致:A对象,包含a/b1/b2/num四个属性,其中b1类型为B1,b2类型为B2;B1中包含b/c两个属性,其中c类型为C,其中只包含一个属性c;B2只包含一个属性b。
Java对象中的方法
主要看一下生成的对象中,都有哪些方法可供使用。由于生成的Java文件太大,就不再贴上来了。
methods in interface
首先,针对最外层,会生成AOrBuilder接口。类A会实现该接口,类A的静态内部类(或者说静态嵌套类)A.Builder也会实现该接口。
接口中包含的方法基本都是获取各个属性的——
比如对于A的String类型属性a,有:
- hasA(),判断属性a是否存在值;
- getA(),获取属性a的值;
- getABytes(),仅针对string类型的属性