点击上方蓝色文字关注公众号
Java 隐藏特性:双括号初始化(Double Brace Initialization)
引入双括号初始化
Java 中的“双括号初始化”常被人以隐藏特性的方式所提及,那何谓“双括号初始化”呢?我们又在哪里有应用到“双括号初始化”呢?
首先,我们先来观察一段典型的“双括号初始”示例代码片段:
Map<String, String> map = new HashMap<String, String>() {
{
put("name", "吴仙杰"); put("englishName", "Jason Wu");}};
嗯,等等……这种写法……怎么有种似曾相识的感觉……
没错,我们并不陌生这种写法,因为在 MyBatis 3 The SQL Builder Class 中就使用了该写法。
以下为我从 MyBatis 3 The SQL Builder Class 中摘录的代码片段:
private String selectPersonSql() {
return new SQL() {
{
SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME"); SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON"); FROM("PERSON P"); FROM("ACCOUNT A"); INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID"); INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID"); WHERE("P.ID = A.ID"); WHERE("P.FIRST_NAME like ?"); OR(); WHERE("P.LAST_NAME like ?"); GROUP_BY("P.ID"); HAVING("P.LAST_NAME like ?"); OR(); HAVING("P.FIRST_NAME like ?"); ORDER_BY("P.ID"); ORDER_BY("P.FULL_NAME"); }}.toString();}