如何在 Java 中实现成员数组列表变量的延迟初始化



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

重点是在不更改太多代码的情况下返工当前实现。

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

说清楚,这是实现它的一种方法:

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

如果 children 为 null,您可以在 getter 中创建它。注意正确的同步。如果创建children的成本不高,并且您不会创建大量实例,请尽早进行。省去你的麻烦。

在 java 中,将数据传输对象的成员变量隐藏在访问器方法(Java Bean 臭名昭著的 getter 和 setter)后面是一种常见的做法。如果这样做,则可以在"List getChildren()"方法中添加所需的任何逻辑(在第一次调用时创建列表,将不可变列表返回到外部客户端等)

最新更新