BeanShell增强的FOR循环
BeanShell支持 Java 1.5 中增强的 for 循环来迭代集合和数组类型。(注意:可以在非 Java 1.5 的环境下使用这个功能)
代码示例
- List foo = getSomeList();
- for ( untypedElement : foo )
- print( untypedElement );
- for ( Object typedElement: foo )
- print( typedElement );
- int [] array = new int [] { 1, 2, 3 };
- for( i : array )
- print(i);
- for( char c : "a string" )
- print( c );
运行效果
详解
1、迭代集合
- List foo = getSomeList();
- for ( untypedElement : foo )
- print( untypedElement );
- for ( Object typedElement: foo )
- print( typedElement );
Step 1
上图的运行结果中出现了Error,原因是【getSomeList()】是一个未声明的方法。遵循 Java 中方法要“先声明后使用”的原则,需要声明一个返回值为“List”集合、名称为“getSomeList()”的方法。
Step 2
上半段声明了“List getSomeList()”方法,而后调用该方法并将返回结果赋值给类型为“List”的变量“foo”,但是还是出现了Error。
在红色文字的末尾可以发现这样一个信息:
- java.lang.ClassCastException:
- 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、迭代数组
- int [] array = new int [] { 1, 2, 3 };
- for( i : array )
- print(i);
上例中,先声明了一个“int”类型的“array”数组变量并进行了初始化。使用增强的 for 循环进行迭代打印数组的内容。注意,“i”也是不带类型的变量。(详情请参见【BeanShell松散类型的Java语法】)
3、迭代字符串
- for( char c : "a string" )
- 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循环相关推荐
- JAVA笔记18-容器之二增强的for循环(不重要)
JDK1.5增强的for循环(foreach??) 转载于:https://www.cnblogs.com/seven7seven/p/3671189.html
- Java基础笔记 – 增强的for循环For each循环 自动装箱拆箱 可变参数
1.For each循环:1.1.语法:1.2.For each循环的使用:1.3.嵌套For each循环:1.4.三种循环遍历集合的列举:1.5.增强的for循环的缺点:2.自动装箱/拆箱(Aut ...
- 使用迭代器和增强版for循环遍历Map集合(keySet)
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;publ ...
- java中for的增强用法,Java中增强for循环的用法
此方法在jdk1.5之后才出现. 1:遍历数组 语法: for (Type value : array) { expression value; } 例子: void Sum() { int[] ar ...
- 浅学 “ 增强For循环 ”
Java中增强for循环(也叫做for each循环) ,是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的.它的内部原理其实是一个iterator迭代器,所以在遍历的过程中,不能对 ...
- 增强For循环以及集合遍历语法糖
什么是增强For 增强for循环是for的一种新用法!用来循环遍历数组和集合.优缺点:只能从头到尾的遍历数组或集合,而不能只遍历部分:在遍历List或数组时,不能获取当前元素下标:增强for使 ...
- 集合类(collection、List、Set、Map、HashMap、TreeMap、、Properties、泛型类、可变长参数、增强for循环、Collections、数组与链表)
集合类 0.集合类概述 1.Collection 概念 (1)Collection接口的API (2)Iterator接口(collection集合的遍历) 案例:collection集合存储学生对象 ...
- 循环 异常 java_java – 增强的循环异常
参见英文答案 > Enhanced 'for' loop causes an ArrayIndexOutOfBoundsException1个 在玩循环时创建以下代码.下面的代码将Fibonac ...
- java 增强for循环 i_java入门 -- 增强for循环
import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; ...
最新文章
- MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
- OCtaveResNet 测试
- “挨踢民工”的奇葩生活录
- as工程放到源码编译_Android 7.1源码编译导入AS完整教程
- php不用密码登录,使用散列密码登录PHP
- linux系统如何启用ftp服务
- 计算机专业考研末流211和双非,211大学考985研究生难吗,如何看待本科985学生读研去211学校?...
- C++中堆和栈的完全解析
- ICWAI和ICWA的完整形式是什么?
- JDK ThreadLocal解析
- linux系统如何启动rpcbind,rpcbind无法启动的问题【已解决】
- html5注册页面样式,HTML5一款小清新风格的登录/注册表单界面模板
- MyEclipse10破解详解过程
- LTE基本结构(常见接口)
- 耗时30分钟C++制作象棋程序,网友:优秀啊!
- Windows沙拉:开机时自动打开NumLock键背后的故事
- Linux - send 出现 Resource temporarily unavailable
- Excel利用函数提取文本内容中的数字
- java中String s=abc及String s=new String(abc)详解
- 读《富爸爸,穷爸爸》后感(三)