年龄问题,但这里的最佳做法是什么?
我头顶的四个例子:
//================
public class POJO{
List<String> list;
}
//================
public class POJO{
List<String> list = new ArrayList<String>();
}
//================
public class POJO{
List<String> list;
public POJO(){
list = new ArrayList<String>();
}
}
//================
public class POJO{
List<String> list;
public getList(){
if (list==null)
list =new ArrayList<String>();
return list;
}
}
我问的是因为我的客户端面向初始化为零的POJO和在查询数据库并且未命中时返回空集合的域对象(但是它们将插入空值)。我想我需要做其中一个但不能决定哪个。
答案 0 :(得分:5)
第二个:
public class POJO {
List<String> list = new ArrayList<String>();
}
答案 1 :(得分:0)
这更多是关于项目中遵循的编码约定而非有害生物实践。只要你们所有人都这样做,方法就没有什么区别了。
除了#1之外,如果null是可接受的值,那么可能应该将字段显式初始化为null。
List<String> list = null;
答案 2 :(得分:0)
第三个。
将这些初始化器放在构造函数中就不会出现奇怪的初始化顺序问题,例如我自己的问题,在这里:Why is my field null even though it should be instantiated immediately?在构造函数开头隐藏调用super()
比一般初始化的详细顺序。
答案 3 :(得分:0)
第二个,只要你不想在列表中的每个操作中检查它是否为空。此外,从数据库中获取时,请确保将元素保留在列表中或至少保留为空集合,从而避免使用NPE。
public class POJO { List<String> list = new ArrayList<String>(); }
答案 4 :(得分:-1)
第三个:
//================
public class POJO{
List<String> list;
public POJO(){
list = new ArrayList<String>();
}
}
反正通常在构造函数中工作; #3就在那里。 #2你需要看两个地方。
我对此的看法:
class MyClass {
// constants first
public static final int CONSTANT_1 = 48;
// private static stuff next
private static final Logger logger = ...;
// private final stuff
private final String property;
// private non-final stuff, with good comments
// protected stuff, with VERY good comments
MyClass() {
// the only place things get initialized
}
}
答案 5 :(得分:-1)
第3个,因为它是一个优选设计的延迟初始化。
答案 6 :(得分:-1)
仅在构造函数中初始化对象。
public class POJO{
private List<String> list = null;
public POJO(){
this.list = new ArrayList<String>();
}
}