BeanShell支持 Java 1.5 中增强的 for 循环来迭代集合和数组类型。(注意:可以在非 Java 1.5 的环境下使用这个功能)
代码示例

  1. List foo = getSomeList();
  2. for ( untypedElement : foo )
  3. print( untypedElement );
  4. for ( Object typedElement: foo )
  5. print( typedElement );
  6. int [] array = new int [] { 1, 2, 3 };
  7. for( i : array )
  8. print(i);
  9. for( char c : "a string" )
  10. print( c );

运行效果

详解
1、迭代集合

  1. List foo = getSomeList();
  2. for ( untypedElement : foo )
  3. print( untypedElement );
  4. for ( Object typedElement: foo )
  5. print( typedElement );

Step 1

上图的运行结果中出现了Error,原因是【getSomeList()】是一个未声明的方法。遵循 Java 中方法要“先声明后使用”的原则,需要声明一个返回值为“List”集合、名称为“getSomeList()”的方法。

Step 2

上半段声明了“List getSomeList()”方法,而后调用该方法并将返回结果赋值给类型为“List”的变量“foo”,但是还是出现了Error。

在红色文字的末尾可以发现这样一个信息:

  1. java.lang.ClassCastException:
  2. Cannot cast java.util.ArrayList to java.awt.List

很明确,类型转换错误。在之前的章节中提到过,【如果有任何与一个实际 Java 对象字段名称存在歧义的情况,那么优先使用确切的字段名。】(详情请点击此处)

因 为在 BeanShell 中无法在未导入确切 Jar 包的环境下区分出“List”的具体包的命名空间,所以默认使用了“java.awt.List”(非集合类)。而此例要使用的是 “java.util.List”,"ArrayList”是“java.util.List”的子类,“List tmpList = new ArrayList();”使用了 Java 中多态的特性。

Step 3

这 样就完整实现了增强 for 循环的例子。需要注意的是,上面的例子中第一个循环使用了未定义类型的变量“untypedElement”,第二个例子中使用了带类型的变量 “typedElement”,这是因为 BeanShell 支持“松散”的变量类型所致。(详情请参见【BeanShell松散类型的Java语法】)

注意:为了避免一些类的歧义,也可以使用导入包的方式来解决。

2、迭代数组

  1. int [] array = new int [] { 1, 2, 3 };
  2. for( i : array )
  3. print(i);

上例中,先声明了一个“int”类型的“array”数组变量并进行了初始化。使用增强的 for 循环进行迭代打印数组的内容。注意,“i”也是不带类型的变量。(详情请参见【BeanShell松散类型的Java语法】)

3、迭代字符串

  1. for( char c : "a string" )
  2. print( c );

上例中对“a string”这样一个字符串进行迭代。由于每次循环的接收值为 char 类型,所以该循环会以字符串中的单个字符为单位进行迭代。

4、迭代其他类型

支持迭代的其他类型还包括:

  • JDK 1.1+ - (no collections): Enumeration, arrays, Vector, String, StringBuffer
  • JDK 1.2+ - (w/collections): Collections, Iterator

可参阅支持增强 for 循环并允许使用动态加载 BeanShell Collection 管理器迭代以上这些类型的 BshIterator API。

本文转自 tongqiuyan  51CTO博客,原文链接:http://blog.51cto.com/tongqiuyan/751206

BeanShell增强的FOR循环相关推荐

  1. JAVA笔记18-容器之二增强的for循环(不重要)

    JDK1.5增强的for循环(foreach??) 转载于:https://www.cnblogs.com/seven7seven/p/3671189.html

  2. Java基础笔记 – 增强的for循环For each循环 自动装箱拆箱 可变参数

    1.For each循环:1.1.语法:1.2.For each循环的使用:1.3.嵌套For each循环:1.4.三种循环遍历集合的列举:1.5.增强的for循环的缺点:2.自动装箱/拆箱(Aut ...

  3. 使用迭代器和增强版for循环遍历Map集合(keySet)

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;publ ...

  4. java中for的增强用法,Java中增强for循环的用法

    此方法在jdk1.5之后才出现. 1:遍历数组 语法: for (Type value : array) { expression value; } 例子: void Sum() { int[] ar ...

  5. 浅学 “ 增强For循环 ”

    Java中增强for循环(也叫做for each循环) ,是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的.它的内部原理其实是一个iterator迭代器,所以在遍历的过程中,不能对 ...

  6. 增强For循环以及集合遍历语法糖

    什么是增强For     增强for循环是for的一种新用法!用来循环遍历数组和集合.优缺点:只能从头到尾的遍历数组或集合,而不能只遍历部分:在遍历List或数组时,不能获取当前元素下标:增强for使 ...

  7. 集合类(collection、List、Set、Map、HashMap、TreeMap、、Properties、泛型类、可变长参数、增强for循环、Collections、数组与链表)

    集合类 0.集合类概述 1.Collection 概念 (1)Collection接口的API (2)Iterator接口(collection集合的遍历) 案例:collection集合存储学生对象 ...

  8. 循环 异常 java_java – 增强的循环异常

    参见英文答案 > Enhanced 'for' loop causes an ArrayIndexOutOfBoundsException1个 在玩循环时创建以下代码.下面的代码将Fibonac ...

  9. java 增强for循环 i_java入门 -- 增强for循环

    import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; ...

最新文章

  1. MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
  2. OCtaveResNet 测试
  3. “挨踢民工”的奇葩生活录
  4. as工程放到源码编译_Android 7.1源码编译导入AS完整教程
  5. php不用密码登录,使用散列密码登录PHP
  6. linux系统如何启用ftp服务
  7. 计算机专业考研末流211和双非,211大学考985研究生难吗,如何看待本科985学生读研去211学校?...
  8. C++中堆和栈的完全解析
  9. ICWAI和ICWA的完整形式是什么?
  10. JDK ThreadLocal解析
  11. linux系统如何启动rpcbind,rpcbind无法启动的问题【已解决】
  12. html5注册页面样式,HTML5一款小清新风格的登录/注册表单界面模板
  13. MyEclipse10破解详解过程
  14. LTE基本结构(常见接口)
  15. 耗时30分钟C++制作象棋程序,网友:优秀啊!
  16. Windows沙拉:开机时自动打开NumLock键背后的故事
  17. Linux - send 出现 Resource temporarily unavailable
  18. Excel利用函数提取文本内容中的数字
  19. java中String s=abc及String s=new String(abc)详解
  20. 读《富爸爸,穷爸爸》后感(三)

热门文章

  1. 在一个Apapche上部署三个论坛
  2. Python性能测试
  3. 在TMG2010中发布Web服务器场
  4. Spring MVC + Hibernate JPA + Bootstrap 搭建的博客系统
  5. linux 网络编程之信号机制
  6. 使用 DES 算法对数据加密
  7. .net面试题汇总-第二篇
  8. jquery API
  9. JDBC--Statement,PreparedStatement,CallableStatement的区别
  10. 用DIV+Javascript实现标签功能