代码之家  ›  专栏  ›  技术社区  ›  maja

从protobuf描述符获取默认实例

  •  1
  • maja  · 技术社区  · 9 年前

    如果我只知道protobuf消息的描述符,我如何获得其默认实例:

    Descriptor descriptor   = SomeOuterMessage.getDescriptor()
                                  .findNestedTypeByName("InnerMessageName");
    Message defaultInstance = descriptor. <???> // how do I get an instance of "InnerMessageName"?
    
    1 回复  |  直到 9 年前
        1
  •  4
  •   Zhongyu Kuang    8 年前

    您可以通过 DynamicMessage 班

    Message PhoneBook {
        repeated Person people = 1;
    }
    Message Person {
        required Name name = 1;
        optional String phone = 2;
    }
    Message Name {
        required String family_name = 1;
        required String given_name = 2;
    }
    

    获取的默认实例的代码 People

    PhoneBook phoneBook = phoneBook.getDefaultInstance();
    Descriptors.Descriptor personDescriptor = phoneBook.getDescriptor().findNestedTypeByName("people");
    DynamicMessage defaultPeopleInstance = DynamicMessage.newBuilder(personDescriptor).getDefaultInstanceForType().build();
    assert defaultPeopleInstance == People.getDefaultInstance();