java protobuf 回调_java操作protobuf

message与builder

经过protoc编译完的每个message都将有一个对应的类,类的内部通过Builder设计模式进行创建对应的message,而生成的message本身是不可变的。

message Person{

required string my_name=1;

optional int32 my_age=2;

repeated string phone_num=3;

}

//使用builder构建message

Person p = Person.newBuilder().setMyName("res").setMyAge(20).addPhoneNum("123456").build();

builder中会为每个字段创建getter和setter,同时可以看到在proto文件中使用小写和下划线构成的message在生成的对象中名字被自动改成了驼峰的格式,官方也推荐在proto文件中使用小写加下划线定义字段名,对于repeated字段在builder中会创建addFieldName以及使用index设置特定位置的setFieldName。

在build出的对象中只存在各个字段的getter方法,而没有setter方法。需要修改的话可以调用对象的toBuilder方法生成builder进行修改,之后再build对象。在build出的对象中还有一些常用的方法:

isInitialized 用于builder来校验所有必填字段是否初始化。

toString 以人类可读的形式显示消息。

mergeFrom(Mesasage other) 适用于builder,用于覆盖消息中的独立字段,递归合并内部message,对repeated元素进行拼接。

clear() 适用builder,清空已经设置的所有字段。

enum

在proto中定义的枚举类型,会生成java中的枚举类型:

enum Gender{

male=1;

femail=2;

}

public enum Gender implements com.google.protobuf.ProtocolMessageEnum {

male(1),

femail(2);

...

private final int value;

private Gender(int value) {

this.value = value;

}

}

对于定义的枚举类型生成对应的枚举类型和值,并把值存在字段的value中,表示对应的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值