我想清理一个类,它以一种我永远不会做的方式使用初始化块的代码,我只是想知道我是否缺少一些信息。代码如下所示:初始化块vs构造函数vs变量初始化
@Entity
class MyClass extends BaseClass {
@ManyToMany(fetch=FetchType.EAGER)
private Set<OherClass> others;
{
if (others == null)
others = new HashSet<OtherClass>();
}
public MyClass(){
super();
}
//getters, setters and other stuff follows
}
我觉得没有理由,更喜欢针对此上面的代码:
@Entity
class MyClass extends BaseClass {
@ManyToMany(fetch=FetchType.EAGER)
private Set<OherClass> others = new HashSet<OtherClass>();
}
或者这样:
@Entity
class MyClass extends BaseClass {
@ManyToMany(fetch=FetchType.EAGER)
private Set<OherClass> others;
public MyClass(){
this.others = new HashSet<OtherClass>();
}
}
我问我的大学,但他唯一能够回答的是初始化块如何工作以及我已经知道的其他事情。我想知道,在序列化,反射,数据库持久性,注入或任何能够使代码成为必需的异常情况下,是否存在一些java(甚至是已经修复的老的)的微妙不当行为或者框架(hibernate,spring)。
重复:http://stackoverflow.com/questions/804589/use-of-initializers-vs-constructors-in-java –
@kocko已经读过,坚果我不问静态初始化或它是如何作品。 – holap