java.lang.IndexOutOfBoundsException - 使用 Protocol buffer 构建 Java 对象时
java.lang.IndexOutOfBoundsException - when building Java Object using Protocol buffer
我正在使用 Protobuff 来构建我的 Java 对象,为什么在我的代码中调用 setHeader(0, h1)
时总是出现 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
异常。
这是我的代码:
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.access00(Dataformat.java:42)
at tutorial.Dataformat$Person$Builder.setHeader(Dataformat.java:815)
...
setHeader()
期望索引已经存在;它不会增加列表大小。这与 java.util.List
相同。您可以改用 addHeader()
。
对于重复的 List 数据类型,只需使用 add***
而不是 set***
所以在你的例子中,你可以使用 addHeader(...)
而不是 setHeader(...)
我正在使用 Protobuff 来构建我的 Java 对象,为什么在我的代码中调用 setHeader(0, h1)
时总是出现 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
异常。
这是我的代码:
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.access00(Dataformat.java:42)
at tutorial.Dataformat$Person$Builder.setHeader(Dataformat.java:815)
...
setHeader()
期望索引已经存在;它不会增加列表大小。这与 java.util.List
相同。您可以改用 addHeader()
。
对于重复的 List 数据类型,只需使用 add***
而不是 set***
所以在你的例子中,你可以使用 addHeader(...)
而不是 setHeader(...)