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

  • 相关阅读:
    RSA算法原理(二)
    RSA算法原理(一)
    Diffie-Hellman 算法
    1028:Ignatius and the Princess III
    1014:Uniform Generator
    1013:Digital Roots
    常见OJ评判结果对照表
    Django模板系统
    Django之视图
    Django之路由系统
  • 原文地址:https://www.cnblogs.com/mediocreWorld/p/16172113.html
Copyright © 2020-2023  润新知