Очистить поля в ProtobufMessage Java

У меня есть прото-сообщение следующей формы:

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?


person 250    schedule 21.10.2019    source источник


Ответы (1)


Буферы Proto неизменяемы, поэтому вы не можете редактировать A напрямую.

Однако вы можете достичь своей цели с помощью Proto Builder. Код будет выглядеть более-менее так:

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

person juggler92    schedule 28.08.2020