假设你有这个 protobuf 模型:
message ComplexKey {
string name = 1;
int32 domainId = 2;
}
message KeyMsg {
oneof KeyMsgOneOf {
string name = 1;
ComplexKey complexName= 2;
}
}
Run Code Online (Sandbox Code Playgroud)
和一个对象 obj,您知道它是字符串或 ComplexKey。
问题
如果不显式检查 obj 类类型,这是使用 protobuf Java API 构建新的 KeyMsg 实例并将 obj 放置在正确字段中的最有效方法?
更新:如果 protoc 生成一个辅助方法来完成我需要的事情,那就太好了。
UPDATE2:给出下面 Mark G. 的正确评论并假设所有字段的类型不同,到目前为止我找到的最佳解决方案是(简化版本):
List<FieldDescriptor> lfd = oneOfFieldDescriptor.getFields();
for (FieldDescriptor fieldDescriptor : lfd) {
if (fieldDescriptor.getDefaultValue().getClass() == oVal.getClass()) {
vmVal = ValueMsg.newBuilder().setField(fieldDescriptor, oVal).build();
break;
}
}
Run Code Online (Sandbox Code Playgroud)