我有一个带有列表作为其成员之一的protobuf
我想替换此列表中的项目。
我尝试删除项i
并在同一位置添加另一个i
List<Venues.Category> categoryList = builder.getCategoryList();
categoryList.remove(i);
但是我收到了不支持的错误
java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableList.remove(Collections.java:1317)
如何进行更换?
答案 0 :(得分:6)
我最终克隆了列表,修改了克隆列表并将其放入旧列表中。
gimp-image-reorder-item
答案 1 :(得分:2)
其中一个解决方案是创建一个新的可修改列表,它包装旧的 - 我的意思是将它传递给例如构造函数。新ArrayList()
:
List<T> modifiable = new ArrayList<T>(unmodifiable);
从现在开始,您应该能够删除和添加元素。
答案 2 :(得分:1)
如果你的List来自数组,它会抛出 java.lang.UnsupportedOperationException 。
/*Example*/
String[] strArray = {"a","b","c","d"};
List<String> strList = Arrays.asList(strArray);
strList.remove(0); // throw exception
因为原始数组和列表是链接的。
列表的大小为固定大小,更改将对两者产生影响。
无法完成添加()或删除()。
答案 3 :(得分:0)
如果要更新protobuff构建器列表,可以使用以下方法实现:
//Considering builder is your Category list builder.
List<Venues.Category> categoryList = builder.getCategoryList(); // Previous list.
builder.setCategory(1, categoryBuilder.build()); //categoryBuilder is your object builder which you want to replace at first location.
// Hope you will get setCategory function by protobuffer, or something like that. because it's created by protobuffer compilation.
List<Venues.Category> updatedCategoryList = builder.getCategoryList();
//Your updated list with new object replaced at 1.