1

C# クライアントから Java サーバーに送信されたリストを含むオブジェクトがあります。protobuf を使用したシリアル化は完全に機能し、オブジェクトは Java で完全に受信されます。しかし、protoc.exe で生成されたクラス (プロト クラスと呼べますか?) には、変更できないリストがあります。基本的に、C# に戻す前にいくつかの値を追加する必要がありますが、値を追加しようとすると例外が発生します。

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    ...

値を追加する方法は次のとおりです。

MyProtoObject.MyResult result = MyProtoObject.MyResut.NewBuilder()
        .setId(1)
        .setValue(9.135)
        .build();
MyObject.getResultList().add(result);

どのように値を挿入できますか?

4

2 に答える 2

1

多少の回避策かもしれませんが、これを試すことができます:

List<MyResult> l = new ArrayList<MyResult>(MyObject.getResultList());
l.add(result);
MyObject.setResultList(l);
于 2012-08-29T09:12:12.573 に答える
0

proto クラスを再生成した後、いくつかのメソッドが欠落しているようです (おそらく最初の生成で間違いを犯しました)。だから今、私はリストに値を追加することができます:

MyObjectProto.MyObject o = MyObjectProto.MyObject.newBuilder()
    .addAllResults(listOfCalculations)
    .build();

listOfCalculation は結果オブジェクトのリストです

あるいは単に :

MyObjectProto.MyObject o = MyObjectProto.MyObject.newBuilder()
    .addResult(calculationResult)
    .build();

CalculationResult は単一の結果オブジェクトです

フラビオのおかげで

于 2012-08-30T10:27:04.647 に答える