假设我们有:
public class Test {
private List<String> mWorkList;
private List<String> mOriginalList;
public Test(List<String> list) {
mWorkList = list;
mOriginalList = list;
}
public void updateData(List<String> newList) {
mWorkList.clear();
mWorkList.addAll(newList);
}
}
Run Code Online (Sandbox Code Playgroud)
我只想要改变mWorkList,但mOriginalList在变过,当我打电话updateData(List<String>)。那么我应该如何做才能保持mOriginalList在构造函数中最初分配的状态?
在 Java 中,您通过引用传递变量。这意味着无论何时您进行赋值时mWorkList = list,变量mWorkList都将指向内存中当前指向的相同位置list。如果你这样做mOriginalList = list,那么mOriginalList也会指向那个位置。即所有三个列表在那个点引用同一个对象。
如果你想要独立的列表,你需要将列表中的所有值复制到一个新列表中,如下所示:
List<String> myList = new ArrayList<>(otherList);
Run Code Online (Sandbox Code Playgroud)
这个构造函数会ArrayList自动添加另一个列表中的所有值,这里是它的文档。
您的代码可能如下所示:
public Test(List<String> list) {
mWorkList = new ArrayList<>(list);
mOriginalList = new ArrayList<>(list);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您不打算更改,mOriginalList您也可以将其保留为mOriginalList = list. 但是请记住,如果用户对list(来自您班级之外的)进行了更改,它们也会反映在您的课程中mOriginalList,这很容易导致令人讨厌的错误。
| 归档时间: |
|
| 查看次数: |
1980 次 |
| 最近记录: |