1

我定义了以下形式的原始消息:

message A {
    message B {
        message C {
            optional string details = 1;
            optional string time = 2;
        }
        repeated C c = 1;
    }
    repeated B b = 1;
}

我想编写一个java代码来清除对象中的字段详细信息。

A a;
a.clearField(b.c.details);

注意这里的 b 和 c 都是重复字段。有什么方法可以为 Java 协议缓冲区实现这一点?

4

1 回答 1

1

原型缓冲区是不可变的,因此您不能直接编辑 A。

但是,您可以使用Proto builder实现您的目标。代码看起来更像:

a = a.toBuilder()
      .setB(
         indexOfB,
         a.getB(indexOfB).toBuilder()
              .setC(
                  indexOfC,
                  a.getB(indexOfB).getC(indexOfC).toBuilder()
                      .clearDetails()
                      .build())
              .build())
       .build();

于 2020-08-28T13:04:57.937 回答