您的位置:首页 > 编程语言 > Java开发

java增强的for循环详解

2016-01-12 18:51 399 查看
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编译可以设置具体项目的编译方式:红框中的全去掉

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: