rad*_*dai 4 c++ java protocol-buffers
说我有以下mode.proto文件:
message EntityD {
optional EntityE ePointer = 1;
optional int32 dField = 2;
}
message EntityE {
optional EntityD dPointer = 1;
optional int32 eField = 2;
}
Run Code Online (Sandbox Code Playgroud)
这有两个实体--D和E,它们允许交叉链接.我的问题是,从以上*.proto生成java代码后无法创建一个循环:
public static void main(String[] args) throws Exception {
Model.EntityD.Builder dBuilder = Model.EntityD.newBuilder();
Model.EntityE.Builder eBuilder = Model.EntityE.newBuilder();
dBuilder.setDField(42);
eBuilder.setEField(7);
dBuilder.setEPointer(eBuilder);
eBuilder.setDPointer(dBuilder);
Model.EntityD d = dBuilder.build();
Model.EntityE e = eBuilder.build();
System.err.println("same d: "+(d==e.getDPointer()));
System.err.println("same e: "+(e==d.getEPointer()));
}
Run Code Online (Sandbox Code Playgroud)
我试图创建一个简单的D < - > E循环.相反,我得到这个:
same d: false
same e: false
Run Code Online (Sandbox Code Playgroud)

有IS周期中创建的模型,但只有具有一定深度的开始.
这是probuf生成的java代码的问题吗?protobuf是否正式支持图表中的周期?其他protobuf"输出"语言的预期结果是什么?(即c ++)
protobuf格式不包括对象标识,并且没有参考/图形支持的概念.它只是一棵基本的树.除此之外的任何内容都将是特定于实现的,而不是规范的一部分.
基本上,不要这样做.
这并不罕见:许多序列化程序也是如此,包括XML和json序列化程序.对于这些情况,同样,一些实现可能支持本地的身份定义 - 但在一般情况下不能保证.
| 归档时间: |
|
| 查看次数: |
1754 次 |
| 最近记录: |