質問: protobufメッセージは、変更不可能なリストを使用して、私はデータ構造としてそれを使用しようとしています 私はデータを取得するためにWebサーバーと通信しているアンドロイドアプリを書いています。私はprotobufとすべての作品を魅力のように使うことに決めました。 しかし、私の問題はこれです、私のデータセットは巨大で、すべてのデータを一度に取得することはできませんので、私はトップレベルを取得して、私が一緒に行く(電話でブラウズする)ように多くを求めます。 私はprotocを使ってJavaクラスを生成しましたが、これはうまく動作し、ちょうど私が望むように(データの最上位レベルのみを持つイニシャル)私の素敵な光沢のあるオブジェクト構造を取得します。 しかし、私は私の主なデータ構造として私のアプリケーションに持っている構造を使用する決定を下し、そのアプリケーションのすべてのリストは変更不可能なので、後でデータを増やすことができず、 現時点では、protoが生成した自動生成されたJavaファイルを単純に編集して、変更不可能ではなく通常のリストを返すようにしましたが、後でそのファイルを再生成する必要がある場合はかなり愚かです。 何をすべきか? protobufオブジェクトをストレージとして使用しないでください。 (自分のストレージクラスを書くのはもちろんのこと、すべてのデータをカスタムオブジェクトにコピーするのは無駄になります。)
回答: 生成されたプロトコルバッファクラスは変更しないでください。 生成されるメッセージクラスは、設計によって不変です。オブジェクトを変更するには、対応する `Builder` クラスを使用して既存のメッセージから新しいメッセージを生成し、setterメソッドを使用してそれを操作し、 `build()`を呼び出して変更されたオブジェクト。例えば: ``` person.toBuilder() .setName("Jeff") .addPhone(phoneNumber) .build(); ``` protobufチュートリアルの「ビルダーとメッセージ」を参照してください。 http://code.google.com/apis/protocolbuffers/docs/javatutorial .html#ビルダー