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() 方法,再测试能否使用该语法糖。
    当然,这只是我的一个不成熟的猜想?如果你测试了,还请告诉我测试的结果。

posted @ 2022-04-20 22:34  mediocrep  阅读(1539)  评论(0编辑  收藏  举报
既然选择了远方,便只顾风雨兼程!