什么是NetBeans“收集字段返回”可选警告?

时间:2015-03-22 04:23:31

标签: java netbeans collections warnings

我正在尽可能多地在NetBeans中启用可选警告,以期成为更好的编码器。其中之一是“收藏场回归”。它的整个描述是“警告收集领域的回归”。 The Wiki wasn't any more helpful.

Screenshot of the option to enable this error.

这是什么意思?如何返回收集字段会有害吗?

2 个答案:

答案 0 :(得分:2)

Java中的许多集合类,例如ArrayListHashSetTreeMap都是可变的。这意味着您可以更改它们(例如,通过添加项目或清除它们)。这意味着在编写不可变类时必须小心,集合字段的getter返回副本

例如,你应该这样做:

public final class Example {

    private final List<Integer> list;

    public Example(List<? extends Integer> list) {
        this.list = new ArrayList<Integer>(list);
    }

    public List<Integer> getList() {
        return new ArrayList<Integer>(list);
    }
}

如果getList()只是简单地说return list;,则调用者本身会引用私有字段list,因此对返回的对象所做的任何更改都会改变{{1}的实例。 1}}。

当你写Example之类的东西时,这个警告可能会告诉你。我的建议是保留该可选警告,因为它可以非常容易地编写return list;而不用思考,结果可能非常混乱。

答案 1 :(得分:1)

@Sahuagin 为防止这种情况,您可以使用

public List<Integer> getList() {
    return Collections.unmodifiableList(list);
}