Java基础:增强for循环的原理
1 背景
java的for循环遍历元素的方法中,有一种增强for循环(Java's enhanced for loop)。这个是Java中的一个语法糖。目的是为了让代码更简洁优雅。今天我们探讨一下,它背后的原理是什么?
2 原理
-
使用条件
首先,当且仅当 一个类实现了 Iterable 接口时,它才能使用该语法糖。 -
反编译代码
// 此处假设 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);
}
-
结论
看到反编译后的代码,一目了然,我们自然清楚了其中的原理。
其实就是在编译时,编译器将 该语法糖代码 转换为了普通语法的代码。 -
延伸
如果一个类未实现 Iterable 接口,而对其使用该语法糖,则编译时报错:foreach not applicable to type 'java.lang.String'。
而我们查看 Iterable 接口的源码,会发现其中有个 forEach() 方法,那么会不会和这个方法有关呢?
大家可以试试看,另外编写一个接口,把 Iterable 接口中的代码 复制过去,尝试实现该接口,能否使用该语法糖;然后,去掉其中的 forEach() 方法,再测试能否使用该语法糖。
当然,这只是我的一个不成熟的猜想?如果你测试了,还请告诉我测试的结果。