Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该在声明中实例化集合字段吗?_Java_Refactoring - Fatal编程技术网

Java 我应该在声明中实例化集合字段吗?

Java 我应该在声明中实例化集合字段吗?,java,refactoring,Java,Refactoring,在声明中实例化集合字段是一种好的做法吗?例如: class A { private List<String> list = new ArrayList<>(); public List<String> getList() { return list; } public setList(List<String> list) { this.list = list; } }

在声明中实例化集合字段是一种好的做法吗?例如:

class A {
    private List<String> list = new ArrayList<>();

    public List<String> getList() {
        return list;  
    }

    public setList(List<String> list) {
        this.list = list;
    }
}

最好尽可能避免使用
null
值。您还可以将字段设置为final,这样您就知道它永远不会为null

private final List<String> list = new ArrayList<>();

@NotNull
public List<String> getList() {
    return list;  
}

最好尽可能避免使用
null
值。您还可以将字段设置为final,这样您就知道它永远不会为null

private final List<String> list = new ArrayList<>();

@NotNull
public List<String> getList() {
    return list;  
}

观点各不相同,但在这种情况下,我肯定认为是的:空集合比可空集合和可空集合更清晰、更纯粹


在那里初始化还意味着可以将字段
设置为final
,这会带来一些好处,不过在这里,您必须将
设置为setList()
而不是调用
clear()
addAll()
新项。因此,仅此一点可能没有多大好处,但在其他情况下,它也有好处……

观点各异,但在这种情况下,我肯定会说是的:空集合比空集合和空集合更清晰、更纯净


在那里初始化还意味着可以将字段
设置为final
,这会带来一些好处,不过在这里,您必须将
设置为setList()
而不是调用
clear()
addAll()
新项。因此,仅此一点可能没有多大好处,但在其他情况下,它也有好处…

我认为启动对象的更好地方是类的构造函数。
全面的解释:


我认为启动对象的更好地方是类的构造函数。
全面的解释:


对于您显示的特定代码,
setList()
可以设置
null
值,因此您无法删除null检查。但是,我建议您将setter更改为1)拒绝空值,或2)设置
Collections.emptyList()
而不是null,或3)设置新的
ArrayList
LinkedList
而不是
null
。 空值总是很难处理,对于集合来说更是如此。许多最佳实践建议禁止空集合。我完全同意


更改这种行为意味着您需要查看
getList()
的所有调用站点,并检查这种更改不会破坏它。如果是,则需要更改解决方案或调整客户端代码。

对于显示的特定代码,
setList()
可以设置
null
值,因此无法删除null检查。但是,我建议您将setter更改为1)拒绝空值,或2)设置
Collections.emptyList()
而不是null,或3)设置新的
ArrayList
LinkedList
而不是
null
。 空值总是很难处理,对于集合来说更是如此。许多最佳实践建议禁止空集合。我完全同意


更改这种行为意味着您需要查看
getList()
的所有调用站点,并检查这种更改不会破坏它。如果是这样,那么您需要更改解决方案或修改客户端代码。

是否需要详细说明为什么这会更好?@Nfear请参考我看到的答案。因此,对于不使用arraylist的情况。可以避免初始化以节省内存。请详细说明为什么这样更好?@Nfear请参考我看到的答案。因此,对于不使用arraylist的情况。可以避免初始化以节省内存。
if (a.getList() != null) // your IDE can tell you this is always true.