如何在Java中为成员arraylist变量实现延迟初始化?

时间:2012-12-10 13:00:44

标签: java lazy-loading lazy-initialization

我有一个带有private List<String> children;的类,它当前在构造函数中初始化但是并不总是需要它,我只想在其他函数需要它时才初始化它。

重点是在不改变代码的情况下重做当前的实现。

我知道如何用其他语言来做,但到目前为止,Java知识非常有限。

3 个答案:

答案 0 :(得分:4)

要拼写出来,这是完成它的一种方法:

public class Whatever 
{
    private List<String> children;

    public List<String> getChildren
    {
        if ( children == null ) { children = new ArrayList<String>(); }
        return children;
    }
    ...
}

另外,请记得写例如。就addChild( String child )而言,get而不是直接访问该字段。如果你真的很偏执和/或在线程环境中并且创建需要很长时间,你可能想要阻止synchronized

答案 1 :(得分:3)

如果children为空,您可以在getter中创建它。注意正确的同步。如果创建children并不昂贵,并且您不会创建大量实例,那就急着做。为您省去麻烦。

答案 2 :(得分:0)

这是java隐藏成员变量的常见做法,数据传输对象隐藏在访问器方法之后,臭名昭着的java bean的getter和setter。如果你这样做,你可以在你的`List getChildren()方法

中添加你想要的任何逻辑(第一次调用时创建列表,将可重写列表返回给外部客户端等)