为了避免在访问ArrayList时出现空指针异常,建议在构造函数中初始化列表或map集合
public class ItemsDetail{
private List<String> items;
public ItemsDetail() {
this.items = new ArrayList<>();
}
}
答案 0 :(得分:0)
这种方法没有错。
当然,除了在构造函数中初始化List
之外,您还可以在声明实例变量时对其进行初始化:
private List<String> items = new ArrayList<>();
在构造器中不初始化List
实例变量的唯一情况是,如果要创建ItemsDetail
类的大量实例,并且对于大多数情况其中您永远不会访问items
变量。
在这种情况下,创建多个您永远不会使用的ArrayList
是多余的。可以通过在访问ArrayList
之前对其进行初始化来进行优化,并仅在必要时对其进行初始化(延迟初始化)。
当然,除非您发现程序太慢并且这种优化有助于提高其性能,否则无需进行此类优化。
某些JDK类使用这种惰性初始化方法。例如,当您编写new ArrayList<>()
时,尚未分配支持List
的数组。而是将一个空数组分配给实例变量:
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
这样可以节省新数组的创建(以防您永远不会在ArrayList
中添加元素),并且还避免了NullPointerException
的危险(以及对null
的需求)检查),方法是将预定义的空数组实例分配给elementData
变量。
考虑一下,这种JDK优化减少了您在自定义类中使用类似优化的动机,因为它使新ArrayList
的实例化操作的扩展性较小。