/**
* 关于protobuf3 默认值问题
* 首先,pb对象的get方法永远不会有null,如果没有设置,会生成对应的默认值
*
* 如果属性值是一个message,那么pb会为这个属性生成一个hasXXX方法,可以用这个方法判断是否设置了这个属性
* 对于其他属性,比如string,uint32等等,如果没有设置,get出来的将会是空值,比如string就是"",uint32就是0,此时无法区分是没有设置还是设置了默认值,需要业务自行约定,比如传一个"-1"等特殊的值标识
*/
@Test
public void test2() {
Person person = Person.newBuilder()
.build();
System.out.println(person.hasCommonInfo());
System.out.println(person.getAge());
System.out.println(person.getName().length());
/**
* 输出:
* false
* 0
* 0
*/
}
pb定义:
message CommonInfo {
uint64 id = 1;
}
message Person {
CommonInfo commonInfo = 1;
string name = 2;
uint32 age = 3;
}