返回getter中的浅表列表副本以及getter如何工作

问题描述 投票:0回答:1

我不确定如何在getter中创建一个浅拷贝实际工作以及它将如何使我们受益。

它是否仍然作为普通的getter起作用,因为每当我调用getter方法时,我都可以检索该列表中的信息?

我担心这个,因为将来如果我打电话给this.stringsthis.getStrings()他们会产生不同的输出,这将是麻烦。

我想这里有一个隐含的问题, 我一直在考虑这个问题一段时间了: 如下例所示,有些人只会调用strings来获取该列表中的信息(因为在这种情况下它是私有的,所以我认为它可以正常工作吗?),其他人去调用this.stringsthis.getStrings。 我是java的初学者,所以所有这些似乎都能够达到相同的结果,这让我很困惑。

谁能解释一下?对不起,如果措辞不清楚。

代码如下:

import java.util.ArrayList;
import java.util.List;

public class Experiment {

    private List<String> strings;

    public Experiment(String string) {
        this.strings = new ArrayList<>();
    }

    public List<String> getStrings() {
        return strings;
    }

}

一些程序员没有实现:

public List<String> getStrings() {
        return strings;
}

相反,他们做:

public List<String> getStrings() {
        return new ArrayList<>(strings);
}
java list arraylist getter-setter shallow-copy
1个回答
0
投票

第一个代码返回strings的浅表副本。返回的引用指向与ArrayList中存储的引用相同的strings对象。通过它们进行的更改将影响同一对象。

第二个代码创建ArrayList的新对象并返回指向它的引用。新对象与字符串中的List具有相同的元素。

ArrayList(Collection c)按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表。

创建一个新对象,以便返回的List中的更改不会影响List中的strings

© www.soinside.com 2019 - 2024. All rights reserved.