我有一个带有 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()"方法中添加所需的任何逻辑(在第一次调用时创建列表,将不可变列表返回到外部客户端等)