1

我一直在尝试使用 java 中的 protobuf 构造/填充子消息/消息。更具体地说,我有一个扩展的扩展号码以及扩展注册表。

有没有办法通过使用给定值填充字段来构造消息?

在 C++ 中,我知道有一种方法可以通过使用反射来做到这一点。通过使用反射接口,可以获取字段描述符(FindKnownExtensionByNumber()),然后构造消息(MutableMessage(message, field descriptor))。

在Java中有类似的方法吗?

4

1 回答 1

2

从...开始:

Message.Builder parent;
int extensionNumber;
ExtensionRegistry registry;

你可以做:

// Look up the extension.
ExtensionRegsitry.ExtensionInfo info =
    registry.findExtensionByNumber(
        parent.getDescriptorForType(), extensionNumber);
if (info == null) {
  throw new IllegalArgumentException("no such extension");
}

// Make a new builder for a message of the extension's type.
Message.Builder builder =
    info.defaultInstance.newBuilderForType();

// ... fill in builder however you want ...

// Insert the new sub-message into the parent.
parent.setField(info.descriptor, builder.build());
于 2013-11-14T22:48:58.477 回答