深入理解Java匿名內部類和代碼塊的巧妙結合
Java編程中,匿名內部類和代碼塊的組合運用,常常使代碼簡潔高效,但初學者可能難以理解其精髓。本文將詳細剖析一段示例代碼,揭示其背后的機制。
讓我們先來看這段代碼:
public static void main(String[] args) { List<String> list = new ArrayList<String>() {{ add("A"); add("B"); add("C"); }}; System.out.println(list); }
乍一看,new ArrayList
1. 匿名內部類:隱形的繼承
立即學習“Java免費學習筆記(深入)”;
new ArrayList
2. 實例初始化塊:對象的即時初始化
緊隨其后的{{ … }} 是一個實例初始化塊。它與構造器不同,實例初始化塊在創建對象時,在其構造器之前執行。在這里,它用于直接向新創建的ArrayList對象中添加元素 “A”、”B” 和 “C”。
因此,這段代碼等效于:
public static void main(String[] args) { List<String> list = new MyArrayList(); // MyArrayList 是一個繼承自 ArrayList 的匿名類 System.out.println(list); } class MyArrayList extends ArrayList<String> { { // 實例初始化塊 add("A"); add("B"); add("C"); } }
MyArrayList 這個類是隱式創建的,我們無需顯式定義它。實例初始化塊負責在對象創建的同時完成初始化工作。
Java版本差異:鉆石運算符的應用
需要注意的是,在Java 7及之前版本,這段代碼需要寫成 new ArrayList
總而言之,這段代碼利用匿名內部類和實例初始化塊,在創建ArrayList對象的同時完成初始化,使得代碼更加緊湊,并提升了可讀性。 這種技巧在需要快速創建并初始化對象時非常實用。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END