2016-11-23 1 views
0

に設定されている場合、私はGPBメッセージのフィールドを反復処理し、メッセージnullをdoesnotのためvalueをチェックGoogleのプロトコルバッファは、フィールドが

public void printFields(Person person){ 
Builder builder = person.toBuilder(); 
Descriptor descriptor = Person.getDescriptor(); 
List<FieldDescriptor> fields = descriptor.getFields(); 
for(FieldDescriptor fd : fields){ 
Object value = builder.get(fd); //this gives the value 
// how to check if this field is set or not 
} 
} 

に設定されているフィールドのリストを見つけるために持っていますチェックメッセージにプリミティブ型が存在する可能性があるので、助けてください。 私は、XXXにデフォルト値または明示的な値があるかどうかを通知するメッセージクラスに対してhasXXX()メソッドを読みましたが、builder/descriptor/fieldDescriptorを使用してこれらを呼び出す方法について説明しました。

+0

'person.hasField(FD)'や 'builder.hasField(FD)'で、既にそれを行うことができます。 [javadoc](https://developers.google.com/protocol-buffers/docs/reference/java/) – gudok

答えて

0

なぜdescriptor/fieldDescriptorを使用する必要がありますか?あなたが "optimize_for = LITE_RUNTIME"オプションを定義すると、それらは利用できません。 はとにかく、あなたはPerson.Builderまたは単に人、例えば:

Builder builder = person.toBuilder(); 
    if (builder.hasXXX()){ 
      XXX xxx = builder.getXXX(); 
    } 
+0

を参照してください。構文バージョン2の場合、最新バージョンは3です。hasXXX()メソッドは存在しません –

関連する問題