靜態初始化器由類加載器調用一次,這正是我想要的,但是在靜態代碼塊之外進行初始化更具可讀性(可辯論)。兩者有什麼不同?初始化變量與其聲明或靜態初始化之間有區別嗎?
private static final Map<MyEnum, Cheese> cheeseCache;
static {
parserCache = new EnumMap< MyEnum, String>(MyEnum.class){{
for(MyEnum myEnum: MyEnum.values()){
put(myEnum, new Cheese(myEnum)) ;
}
}};
}
或本:
private static final Map<Lab, LabResultParser> cheeseCache
= new EnumMap< MyEnum, String>(MyEnum.class){{
for(MyEnum myEnum: MyEnum.values()){
put(myEnum, new Cheese(myEnum)) ;
}
}};
只是好奇,第二個編譯?變量聲明中的for循環? –
@JunedAhsan是它在一個anoymous子類(雙大括號initalziation) – NimChimpsky
使用javap來拆卸這兩個,看看它們有何不同。 –