gpt4 book ai didi

java - 这两种初始化模式有区别吗?

转载 作者:行者123 更新时间:2023-12-02 07:59:08 25 4
gpt4 key购买 nike

假设我有这个:

public class Whatever {
private ArrayList<String> myList = new ArrayList<String>();
// more code goes here
}

或者假设我有这个:

public class Whatever {
private ArrayList<String> myList = null;

public Whatever() {
myList = new ArrayList<String>();
}
}

myList 的这两种初始化有什么区别?选择第一个变体会不会是错误的?

最佳答案

第一个变体将始终实例化数组列表,第二个变体仅在调用默认构造函数时实例化。对于第二个解决方案,您必须为您添加的任何其他构造函数调用默认构造函数,例如

public class Whatever {
private final List<String> myList;

public Whatever() {
myList = new ArrayList<String>();
}

public Whatever(String name) {
this();
// Other stuff done
}

public Whatever(List<String> myList) {
this.myList = myList;
}
}

如果您不总是使用列表(例如,如果您像我的示例一样直接在另一个构造函数中设置列表)并且希望避免创建不必要的对象,那么(第二个)“惰性”初始化方法可能会更好。 (编辑:我将 ArrayList 更改为接口(interface)并将其设置为最终的。这不是问题的一部分,但它是 - 正如评论中提到的 - 使用列表集合的最佳方式)。

关于java - 这两种初始化模式有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2012394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com