Jav*_*Dev 5 java initialization arraylist
在Java中初始化ArrayList字段的最佳实践是什么(避免测试空值)?
在声明时,像这样:
private List<String> myList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
或者在吸气器中,像这样:
public List<String> getMyList() {
if(myList == null) {
myList = new ArrayList<String>();
}
return myList;
}
Run Code Online (Sandbox Code Playgroud)
或者,在构造函数中:
public Test(){
myList = new ArrayList<String>();
}
Run Code Online (Sandbox Code Playgroud)
也许它是一样的,但我很想知道.
第一个选项允许你做一个
private final List<String> myList = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
从而防止您以后意外地创建一个全新的列表; 从而帮助(很多,而不是所有)多线程问题.除此之外,现在编译器可以帮助您确保您的字段只初始化一次.
除此之外,第二个选项可以被视为"延迟初始化".从这个意义上说:它可以被视为"优化选择"!从那里:许多人主张避免过早优化!
你知道,当你不能依赖已经创建的列表时会造成很多麻烦.因此,即使从这个角度来看,你还有另一个理由来选择选项1!
编辑,关于编译器选项:从语义上看,选项1和3是(或多或少)"相等"[提示:如果你发现如果你选择option1或option3那会对你的代码产生影响......那就是很好地表明你在你的代码中做了一些非常错误的事情).
尽管如此,有一点可以产生影响 - 如果你有一个"依赖注入"构造函数,如:
public YourClass() { this(new ArrayList<String>); }
YourClass(List<String> incomingList) { myList = incomingList; }
Run Code Online (Sandbox Code Playgroud)
这个解决方案对于你需要"控制"的那些对象是有意义的; 在以下意义上:您需要将模拟传递给您的类以启用单元测试.
长话短说:
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |