我想清理一個類,它以一種我永遠不會做的方式使用初始化塊的代碼,我只是想知道我是否缺少一些信息。代碼如下所示:初始化塊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