gpt4 book ai didi

java - Protobuf 和 Java : put object into oneof

转载 作者:行者123 更新时间:2023-12-03 20:24:55 26 4
gpt4 key购买 nike

假设你有这个 protobuf 模型:

message ComplexKey {
string name = 1;
int32 domainId = 2;
}

message KeyMsg {
oneof KeyMsgOneOf {
string name = 1;
ComplexKey complexName= 2;
}
}

和一个对象 obj,你知道它是一个字符串或一个 ComplexKey。



没有显式检查 obj 类类型,这是使用 protobuf Java API 将 obj 放置在正确字段中的最有效方法来构建新 KeyMsg 实例?

更新:如果 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;
}
}

最佳答案

我怀疑有比使用 instanceof 更好的方法:

KeyMsg.Builder builder = KeyMsg.newBuilder();
if (obj instanceof String) {
builder.setName((String) obj);
} else if (obj instanceof ComplexKey) {
builder.setComplexName((ComplexKey) obj);
} else {
throw new AssertionError("Not a String or ComplexKey");
}
KeyMsg msg = builder.build();

关于java - Protobuf 和 Java : put object into oneof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com