我一直在尝试使用 java 中的 protobuf 构造/填充子消息/消息。更具体地说,我有一个扩展的扩展号码以及扩展注册表。
有没有办法通过使用给定值填充字段来构造消息?
在 C++ 中,我知道有一种方法可以通过使用反射来做到这一点。通过使用反射接口,可以获取字段描述符(FindKnownExtensionByNumber()),然后构造消息(MutableMessage(message, field descriptor))。
在Java中有类似的方法吗?
我一直在尝试使用 java 中的 protobuf 构造/填充子消息/消息。更具体地说,我有一个扩展的扩展号码以及扩展注册表。
有没有办法通过使用给定值填充字段来构造消息?
在 C++ 中,我知道有一种方法可以通过使用反射来做到这一点。通过使用反射接口,可以获取字段描述符(FindKnownExtensionByNumber()),然后构造消息(MutableMessage(message, field descriptor))。
在Java中有类似的方法吗?
从...开始:
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());