這貌似是個不為人知的語言技巧。我看到一般人寫Java里初始化靜態常量都是
public static final Map<String, String> DATA = new TreeMap<String, String>();
static
{
DATA.put("a", "A");
//blah blah blah
}
使用所在類的static塊來初始化DATA,其實還有另外一種寫法:
public static final Map<String, String> DATA = new TreeMap<String, String>()
{{
this.put("a", "A");
//blah blah blah
}};
這實際上是利用了匿名類的特性,內層的{是用來作匿名子類的構造函數,所以可以直接插入初始化代碼,這個小語言技巧不常見,但是比較實用。