java增强的for循环详解

java增强的for循环原理和如何实现一个支持增强for循环的类。

for循环如下:

  List<String> arrayList = new ArrayList<String>();
    arrayList.add("1");
    arrayList.add("2");
    arrayList.add("3");
    arrayList.add("4");
    for(String s: arrayList){
     
      System.out.println(s);
    }

具体java是怎样实现的呢,先编译在反编译后查看源码实现。--注编译不能采用debug方式编译

 ArrayList localArrayList = new ArrayList();
    localArrayList.add("1");
    localArrayList.add("2");
    localArrayList.add("3");
    localArrayList.add("4");
    Iterator localIterator = localArrayList.iterator();
    while (localIterator.hasNext())
    {
      String str = (String)localIterator.next();
      System.out.println(str);
    }
从中看出是通过iterator实现的。从反编译后的结果看list的泛型已经去掉了,这是由于java的泛型实现是伪实现,编译后写入class时就去掉了,只在编译期做类型检查。


2.如何实现一个支持for循环的类呢。既然是通过iterator实现的,那实现也就简单了,就是实现iterable接口即可。

下面一个简单实现底层借用LinkedList实现。

 

 static class CanForeach<T> implements Iterable<T>{

    List<T> list = new LinkedList<T>();
    public void add(T s){
      list.add(s);
    }
    public Object remove(int i){
      return list.remove(i);
    }
    public Object remove(T i){
      return list.remove(i);
    }
    @Override
    public Iterator<T> iterator() {
      return list.iterator();
    }
    
  }
可以测试下:结果输出

a

b

 CanForeach<String> cf = new CanForeach<String>();
    cf.add("a");
    cf.add("b");
    for(String  c : cf){
      System.out.println(c);
    }
当然iterator对象的返回偷了个懒采用了list直接返回的。当然可以实现实现一个。只需实现iterator接口并override对应方法即可。

注编译不能采用debug方式编译 用ant编译 若用eclipse编译可以设置具体项目的编译方式:红框中的全去掉



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值