abstractlist protobuf java

时间:2012-08-29 08:21:50

标签: java list protocol-buffers

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

如何在其中插入值?

2 个答案:

答案 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是单个结果对象

感谢弗拉维奥