我有一个对象,其中包含一个从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