2

我正在使用 Protobuff 来构建我的 Java 对象,为什么在调用我的代码时总是java.lang.IndexOutOfBoundsException: Index: 0, Size: 0出现异常。setHeader(0, h1)

这是我的代码:

        Person.Header h1 = Person.Header.newBuilder()
                .setKey("Key1")
                .setValue("value1")
                .build();

        Person person = Person.newBuilder()
                .setBody("TestBody")
                .setHeader(0, h1)
                .build();

这是我的 protobuff 消息(调用 dataformat.proto):

syntax = "proto3";
package tutorial;

option java_package = "tutorial";

message Person {
    string body = 1;
    repeated Header header = 2;

    message Header {
        string key = 3;
        string value = 4;
    }
}

堆栈跟踪:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.set(ArrayList.java:453)
    at com.google.protobuf.ProtobufArrayList.set(ProtobufArrayList.java:96)
    at tutorial.Dataformat$Person.setHeader(Dataformat.java:572)
    at tutorial.Dataformat$Person.access$1200(Dataformat.java:42)
    at tutorial.Dataformat$Person$Builder.setHeader(Dataformat.java:815)

...

4

2 回答 2

2

setHeader()期望索引已经存在;它不会增加列表大小。这与java.util.List. 你可以addHeader()改用。

于 2018-09-26T16:47:05.533 回答
0

对于重复的 List 数据类型,只需使用add***代替set***
因此在您的示例中,您可以使用addHeader(...)代替setHeader(...)

于 2021-11-18T14:57:37.870 回答