BeanShell增强的FOR循环

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. forchar 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. forchar 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。

你可能感兴趣的:(BeanShell语法,BeanShell实例,BeanShell迭代器,BeanShell的for循环,BeanShell松散类型)