我试图分配全局变量的数据并更改局部变量的数据,但是当我更改局部变量的结构时,全局变量也会随之更改。
private void remove(Message M) {
int p = list.lastIndexOf(M);
List<Message> x = list;
list.remove(p);
indexedMessages.remove(M.getMessageid());
notifyItemRemoved(p);
notifyItemRangeChanged(p, list.size());
// Removing the following items from "x" also causes the elements to be removed from recycleView.
x.remove(0);
x.remove(x.size() - 1);
}
我不明白的两件事:
无论如何,在原始的“列表”(私有列表列表)上,第一项和最后一项只是占位符。从此列表中删除一个项目时,我想存储该列表的新副本,但不使用占位符。
每次创建适配器时都会添加占位符。
在创建局部变量之前x
,
完成局部变量后x
,
从中删除元素后x
,
因为变量x
是指针/参考类型的对象List<Message>
称为list
。因此,由于更改和更改均指向同一个对象,因此x
将同时应用更改list
。
如果要在x
不影响全局变量的情况下进行更改,则必须x
指向一个新对象,然后将全局变量的所有内容复制到中x
。请注意,这可能是多余的。例如,这将起作用,
List<Message> x = new ArrayList<Message>();
//modify x here
由于注释中指出的原因,这是多余的,因为
List<Message> x = ArrayList<Message>()
can be rewritten as List<Message> x = ArrayList<>()
since the object type can be inferred from List<Message>
so there's no need to restate itAlso if we have :
List<String> a = new ArrayList<String>();
a.add("a");
a.add("b");
a.add("c");
We can copy "a"'s contents into "b" as follows.
List<String> b = new ArrayList<>(a);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句