我定义了这样的信息
message Element {
optional ElementTail element_tail=1;
}
message ElementTail {
extension 1000 to max;
}
现在我定义了扩展
message ElementTailFirst {
extend ElementTail {
optional ElementTailFirst element = 1001;
}
optional string first_tail_field = 1;
}
现在我有一个json元素的字符串
String jsonString = "{"first_tail_field" : "something"}"
现在我创造了一个 builder
修改elementtailfirst.element。这是一个动态代码,所以我使用了 1001
,以从extensionregistry中查找它。然后我将json与builder合并。
JsonFormat.parser().merge(jsonString,builder)
现在, System.out.println(builder.getDescriptorForType().getExtensions().size())
,打印1,这是预期的。
现在考虑第二种情况,这里我将扩展定义为:
message ElementFirst{
extend ElementTail {
optional ElementTailOptions element = 1001;
}
message ElementTailOptions {
optional string first_tail_field = 1;
}
}
使用相同的过程,将builder与json合并后
System.out.println(builder.getDescriptorForType()
.getExtensions().size()),
是0。所以,现在它没有出现在扩展中。我不知道为什么会这样?这两种方法有什么区别?
暂无答案!
目前还没有任何答案,快来回答吧!