我有一个带有private List<String> children;
的类,它当前在构造函数中初始化但是并不总是需要它,我只想在其他函数需要它时才初始化它。
重点是在不改变代码的情况下重做当前的实现。
我知道如何用其他语言来做,但到目前为止,Java知识非常有限。
答案 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()方法
中添加你想要的任何逻辑(第一次调用时创建列表,将可重写列表返回给外部客户端等)