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 に答える