特定のcom.google.protobuf.Descriptors.DescriptorのクラスのnewBuilder()を作成する必要があります。com.google.protobuf.Descriptors.Descriptorを使用して新しいビルダーを作成
私は以下のプロトコルのためのGoogleのプロトバッファを使用してjarファイルを作成しました:
message Foo
{
optional uint32 id = 1;
optional string fooName = 2;
}
message Bar
{
optional uint32 id = 1;
optional string barName = 2;
}
Java側からは、私はnewBuilderを(作成する必要がある記述に基づきます)。たとえば :
Message.Builder message;
if(Descriptor.getName().equals("Foo"))
message = Foo.newBuilder();
if(Descriptor.getName().equals("Bar"))
message = Bar.newBuilder();
しかし、私はもしそうでないか、スイッチケースのために行くにしたくありません。 また、DynamicMessageを使用して他の方法で試してみました。
Message.Builder message = DynamicMessage.newBuilder(descriptor);
しかし、この場合には、私ははFooまたはバークラスにそれをキャストすることはできませんよ。 DescriptorやDescriptorの名前を使ってnewBuilder()を作成する方法はありますか?
盲目的に私はこのような指定されたクラス名のnewBuilderを()が必要です。
Message.Builder message = SomeUtilClass.getNewBuilder("Foo");
を、私はそれはむしろその記述より ')' Foo.getDefaultInstanceを(周りに合格する方が簡単だということを発見する傾向があります。そのビルダーとその記述子の両方を取得できます。 –
実際に私の問題は、私はそこに実際のFooやBarを持っていないということです。私はFooまたはBarのDescriptorしか持っていません。その記述子を使用して、私は新しいビルダーを作成する必要があります。現在、if else条件を使用して新しいビルダーを作成しています。私はコードを最小化したい。 – Prasath
私はあなたができるならば、Descriptorを渡さないで、プロトタイプのデフォルトインスタンスを代わりに渡すのです。なぜならそれはより多くの型情報を持っているからです。 b)ディスクリプタとビルダーを取得できます。記述子を渡すという設計は、必要以上に難しくなります。 –