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() 方法,再測試能否使用該語法糖。
    當然,這只是我的一個不成熟的猜想?如果你測試了,還請告訴我測試的結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM