1. 程式人生 > 其它 >Java基礎:增強for迴圈的原理

Java基礎:增強for迴圈的原理

目錄

1 背景

java的for迴圈遍歷元素的方法中,有一種增強for迴圈(Java's enhanced for loop)。這個是Java中的一個語法糖。目的是為了讓程式碼更簡潔優雅。今天我們探討一下,它背後的原理是什麼?

2 原理

  1. 使用條件
    首先,當且僅當 一個類實現了 Iterable 介面時,它才能使用該語法糖。

  2. 反編譯程式碼

// 此處假設 MenuItem 實現了 Iterable 介面,以下是原始碼
for (MenuItem menuItem: menuItems) {
	System.out.println(menuItem);
}

// 以下是上面的原始碼反編譯後的程式碼
Iterator var1 = this.menuItems.iterator();
while(var1.hasNext()) {
	MenuItem menuItem = (MenuItem)var1.next();
	System.out.println(menuItem);
}
  1. 結論
    看到反編譯後的程式碼,一目瞭然,我們自然清楚了其中的原理。
    其實就是在編譯時,編譯器將 該語法糖程式碼 轉換為了普通語法的程式碼。

  2. 延伸
    如果一個類未實現 Iterable 介面,而對其使用該語法糖,則編譯時報錯:foreach not applicable to type 'java.lang.String'。
    而我們檢視 Iterable 介面的原始碼,會發現其中有個 forEach() 方法,那麼會不會和這個方法有關呢?
    大家可以試試看,另外編寫一個介面,把 Iterable 介面中的程式碼 複製過去,嘗試實現該介面,能否使用該語法糖;然後,去掉其中的 forEach() 方法,再測試能否使用該語法糖。
    當然,這只是我的一個不成熟的猜想?如果你測試了,還請告訴我測試的結果。