java增强的for循环详解
2016-01-12 18:51
399 查看
java增强的for循环原理和如何实现一个支持增强for循环的类。
for循环如下:
具体java是怎样实现的呢,先编译在反编译后查看源码实现。--注编译不能采用debug方式编译
2.如何实现一个支持for循环的类呢。既然是通过iterator实现的,那实现也就简单了,就是实现iterable接口即可。
下面一个简单实现底层借用LinkedList实现。
a
b
注编译不能采用debug方式编译 用ant编译 若用eclipse编译可以设置具体项目的编译方式:红框中的全去掉
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编译可以设置具体项目的编译方式:红框中的全去掉
相关文章推荐
- Struts2与Spring整合
- Java基础之集合归总
- Calendar 类的应用
- Spring-MVC配置方法
- JDK 7 中的 Fork/Join 模式 简单入门
- Spring 笔记
- SpringMVC搭建
- struts2中s:iterator 标签的使用详解
- eclipse 安装反编译插件
- Java 8 学习–lambda表达式
- Java注解(1)-基础
- 40个Java多线程问题总结
- java.util.Collection体系源码解读<二>Collection接口源码
- Java-Map
- springmvc开发--IOC和AOP
- Java-Map
- Java-Map
- spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
- Java [Leetcode 110]Balanced Binary Tree
- 详解Spring MVC 4常用的那些注解