首页 > 代码库 > protobuf extensions(extend)的消息定义及Java使用方法
protobuf extensions(extend)的消息定义及Java使用方法
在定义protobuf消息时,有时候需要用到extensions来对原有的消息类型进行扩展,有利于消息定义的重复使用。
1、下面写一个最简单的例子,定义一个message BaseData,并对其进行扩展:
Example.proto:
// 定义一个message BaseData,100~199之间的tag可供扩展 message BaseData { required int32 code = 1; extensions 100 to 199; } // 扩展BaseData,加上一个extend_data,tag为100 extend BaseData { required string extend_data = http://www.mamicode.com/100;>
运行protoc.exe --java_out=. Example.proto生成Example.java文件。Java代码:
public static void main(String[] args) { Example.BaseData.Builder baseBuilder = Example.BaseData.newBuilder(); baseBuilder.setCode(123); baseBuilder.setExtension(Example.extendData, "xxg"); Example.BaseData baseData = http://www.mamicode.com/baseBuilder.build();>
这里需要调用setExtension方法来设置扩展的extendData。setExtension有两个参数,第一个定义扩展的是哪一个字段,Example.extendData即表示Example类中的extendData,第二个就是设置扩展字段的值。2、另外还有一种常用的扩展定义方式:
Example.proto:
// 定义一个message BaseData,100~199之间的tag可供扩展 message BaseData { required int32 code = 1; extensions 100 to 199; } // 定义一个message Data message Data { required string msg = 1; // 扩展BaseData,加上一个Data类型的字段,tag为100 extend BaseData { required Data extend_data = http://www.mamicode.com/100;>
这种方式看起来有点奇怪,实际上可以理解成这样:// 定义一个message BaseData,100~199之间的tag可供扩展 message BaseData { required int32 code = 1; extensions 100 to 199; } // 定义一个message Data message Data { required string msg = 1; } // 扩展BaseData,加上一个Data类型的字段,tag为100 extend BaseData { required Data extend_data = http://www.mamicode.com/100;>
Java代码:public static void main(String[] args) { // 先构造一个message Data类型对象 Example.Data.Builder dataBuilder = Example.Data.newBuilder(); dataBuilder.setMsg("xxg"); Example.Data data = http://www.mamicode.com/dataBuilder.build();>
注意上面的Java代码用的是第一种proto消息定义方式,如果用的是下面第二种消息定义的方式,setExtension的参数Example.Data.extendData就应该改成Example.extendData,注意嵌套结构。
作者:叉叉哥 转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/37874081
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。