我有一个对象,其中包含从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);
如何在其中插入值?
答案 0 :(得分:1)
也许这是一种解决方法,但你可以试试这个:
List<MyResult> l = new ArrayList<MyResult>(MyObject.getResultList());
l.add(result);
MyObject.setResultList(l);
答案 1 :(得分:0)
在重新生成proto类之后好了,似乎缺少一些方法(我可能在第一代中犯了错误)。所以现在我可以在列表中添加值:
MyObjectProto.MyObject o = MyObjectProto.MyObject.newBuilder()
.addAllResults(listOfCalculations)
.build();
listOfCalculation是结果对象列表
或只是:
MyObjectProto.MyObject o = MyObjectProto.MyObject.newBuilder()
.addResult(calculationResult)
.build();
CalculationResult是单个结果对象
感谢弗拉维奥