今天刚开始学习protobuf。
在学到repeadted的时候出了问题。现在将问题总结如下,以作备录。
package xmty; option java_package = "comtwo.xmty.java"; option java_outer_classname = "PeopleTest"; message Peoples{ required int32 id = 1; optional string sex = 2; repeated string ppp = 3; }
转成JAVA,后JAVA调用代码如下:
public static void main(String[] args) {
// TODO Auto-generated method stub
PeopleTest.Peoples.Builder b = PeopleTest.Peoples.newBuilder();
b.setId(1);
b.setSex(PeopleTest.Peoples.SexType.MALE.toString());
for (int i = 0; i < 10; i++) {
b.setPpp(i, "zms"+i);
}
Peoples p = b.build();
System.out.println(p);
}
时,出现错误:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.set(Unknown Source)
at comtwo.xmty.java.PeopleTest$Peoples$Builder.setPpp(PeopleTest.java:692)
at comtwo.xmty.java.Test2.main(Test2.java:26)
按JAVA编程的习惯,正常的要设置某个的值时,都是使用的set来设置值。
但是,在protobu中的repeated的这个属性,要设置值,要用add。
正常代码如下:
public static void main(String[] args) {
// TODO Auto-generated method stub
PeopleTest.Peoples.Builder b = PeopleTest.Peoples.newBuilder();
b.setId(1);
b.setSex(PeopleTest.Peoples.SexType.MALE.toString());
for (int i = 0; i < 10; i++) {
b.addPpp("zms"+i);
}
Peoples p = b.build();
System.out.println(p);
}
也就是说,如果使用了set的话,就等于重写对应index的值。
因这个问题,卡了我好久的时候。且记之。