java的抽象列表protobuf



我有一个对象,其中包含一个从C#客户端发送到Java服务器的列表。使用protobuf的序列化可以完美地工作,并且对象在Java中可以完美地接收。但是用protocol.exe生成的类(我们可以称之为proto类吗?)有一个我不能修改的列表。基本上,在将其返回到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);

如何在其中插入值?

也许这是一种变通方法,但您可以尝试一下:

List<MyResult> l = new ArrayList<MyResult>(MyObject.getResultList());
l.add(result);
MyObject.setResultList(l);

好的,在重新生成proto类之后,似乎缺少了一些方法(我可能在第一代中犯了错误)。所以现在我可以在列表中添加值:

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

listOfCalculation是的结果对象列表

或者只是:

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

CalculationResult是一个单一结果对象

感谢Flavio