java.lang.IndexOutOfBoundsException-使用协议缓冲区构建Java对象时

时间:2018-09-26 10:48:04

标签: java protocol-buffers grpc grpc-java proto

我正在使用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();

这是我的原型信息(调用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;
    }
}

StackTrace:

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)

...

1 个答案:

答案 0 :(得分:1)

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