gpt4 book ai didi

java - 延迟初始化集合

转载 作者:行者123 更新时间:2023-12-04 20:49:28 25 4
gpt4 key购买 nike

延迟初始化集合的最佳方法是什么,我特别关注 Java。我看到有人决定在修改方法中这样做(这似乎有点令人讨厌),如下所示:

public void addApple(final Apple apple) {       

if (this.apples == null) {
apples = new LinkedList<Apple>();
}
this.apples.add(apple);
}

您可以将初始化重构为一个方法并从添加/删除/更新等调用它...但它似乎有点讨厌。人们还通过以下方式公开 Collection 本身这一事实往往使情况更加复杂:

public Collection<Apple> getApples() {
return apples;
}

这打破了封装并导致人们直接访问集合。

惰性初始化的目的纯粹是与性能相关。

我很好奇其他人对此提出的方法是什么。有什么想法吗?

最佳答案

我将延迟实例化放入给定函数的 getter 中。通常我会懒惰地实例化一个列表,以避免尽可能避免数据库命中。示例:

public final Collection<Apple> getApples() {
if (apples == null) {
// findApples would call the DB, or whatever it needs to do
apples = findApples();
return apples;
}

public void addApple(final Apple apple) {
//we are assured that getApples() won't return
//null since it's lazily instantiated in the getter
getApples().add(apple);
}

这种方法意味着其他函数(例如,removeApples())也不需要担心实例化。他们也只会调用 getApples()。

关于java - 延迟初始化集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769341/

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