1

我有一个对象,其中包含从 C# 客户端发送到 Java 服务器的列表。使用 protobuf 的序列化工作完美,并且在 Java 中完美地接收了对象。但是使用 protoc.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);

如何在其中插入值?

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 回答