2011-10-31 40 views
1

我有一個相當簡單的android應用程序,它從web服務器獲取protobuf數據並擁有protoc生成的java類。從protobuf生成的文件中獲取可更改的對象

現在我不需要任何其他數據,而不是我的應用程序中的這些數據。所以我認爲我會簡單地使用這些數據而不是包裝它,因爲這只是很多額外的工作。

然而,有時我用新數據(proto文件中的嵌套消息)展開樹,然後我需要能夠將這些插入到當前樹中,因爲java類總是返回unmodifiableList,所以這是不允許的。

我現在在想我可以用反射來獲得列表,因此可以修改。它看起來並不是一個很好的解決方案,但它爲打包課程及其中的所有內容做了額外的工作。所以我的實際問題是,這是一個很大的否定或者會沒事。

我在某處甚至在谷歌他們認爲,如果它是聰明的protobuf對象作爲數據結構或只作爲純粹的發送/接收消息。

回答

1

協議緩衝區消息實例是不可變的bydesign

如果你想從一個protobuf的最初操縱數據,創建一個新的Builder,使用mergeFrom預填充的原始字段:

MyMessage originalMessage = getMyMessage(); 
MyMessage.Builder newMessage = new MyMessage.Builder(); 
newMessage.mergeFrom(originalMessage); 
相關問題