3

私はプロトコル バッファが初めてで、リフレクション メソッドを調査しています。C++ でリフレクション インターフェイスを取得するメソッド GetReflection() が表示されますが、Java で同様のメソッドを見つけることができませんでした。Javaでリフレクションインターフェースを取得する方法を知っている人はいますか?

4

3 に答える 3

7

Protobuf-C++ の「リフレクション」インターフェースに相当する Java は、単なるcom.google.protobuf.Messageインターフェースです。すべてのメッセージ オブジェクトがこれを実装しておりgetField()、記述子によって任意のフィールドを読み取るようなメソッドがあります。同様に、すべてのビルダーはMessage.Builderwhich hassetField()などを実装します。C++ とは異なり、この機能は別のオブジェクトに委譲されません。

于 2013-10-18T23:43:52.107 に答える
1

あなたがやろうとしている理由を説明できますか???、私はそれを念頭に置いて答えを調整することを知っています

  • 他の人が示したように、Java の任意のクラスでリフレクションを使用できます。
  • Java 版はDynamicMessage Classを提供します。何をしようとしているのかによっては、 DynamicMessage クラスが求めているものであることに気付くかもしれません。このクラスを使用すると、proto 記述子を使用して任意の Protocol-Buffer を読み取り、getField メソッドなどを介してフィールドにアクセスできます。Proto-Descriptor でプロトコル バッファーが必要になります (protoc コマンドの --descriptor_set_out= パラメーターを使用して取得できます)。 )。
  • 速度を最適化しない場合、protoc コマンドはリフレクションを使用するクラスを生成します。
于 2013-10-18T01:13:30.803 に答える
-5

リフレクション インターフェイスは、リフレクション パッケージにあります。通常、クラスインスタンスを使用してインターフェイスにアクセスします。

public static void main(String[] $)
{
    Class clazz = String.class;
    System.out.println(clazz.getName()); // "java.lang.String"
}
于 2013-10-18T00:20:21.360 に答える