一些用来演示的数据):
清单 11. 输出正是您想要的 —— 许多打印!
run-ch07:
[echo] Running Chapter 7 examples from Java 5.0 Tiger: A Developer''s Notebook
[echo] Running ForInDemo...
[java] Assigning arguments to lists...
[java] word1 word2 word3 word4 word1
[java] Printing words from wordList (ordered, with duplicates)...
[java] word1 word2 word3 word4 word1
[java] Printing words from wordset (unordered, no duplicates)...
[java] word4 word1 word3 word2
用for/in在Java 5.0中增强循环(5)
时间:2011-02-05 Brett McLaughlin
类型转换之痛
迄今为止,在处理集合的时候,您已经看到 for/in 使用通用的变量类型,例如 Object。这么做很好,但是没有真正利用到 Tiger 的另一项特性 —— 泛型(有时也叫作 参数化类型)。我把泛型的细节留给 developerWorks 即将针对这个主题推出的教程,但是泛型让 for/in 变得更加强大。
记得 for/in 语句的 声明 部分创建了一个变量,它代表要遍历的集合中每个项目的类型。在数组中,类型非常明确,因为类型是强类型的, int[] 只能包含整数,所以在循环中没有类型转换。在您通过泛型使用类型化列表时,也有可能做到这点。清单 12 演示了几个简单的参数化集合:
清单 12. 向集合类型添加参数意味着可以避免以后的类型转换
List
<String> wordlist = new ArrayList
<String>();
Set
<String> wordset = new HashSet
<String>();
现在,您的 for/in 循环可以避开老式的 Object,变得更加具体。清单 13 演示了这一点:
清单 13. 在知道集合中的类型时,您的循环体可以更加具有类型针对性
for (String word : wordlist) {
System.out.print(word + " ");
}
作为一个更加完整的示例,清单 14 沿用了清单 10 所示的程序,并添加了一些通用的列表和更加具体的 for/in 循环:
清单 14:可以利用泛型重写清单 10
package com.oreilly.tiger.ch07;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ForInDemo {
public static void main(String[] args) {
// These are collections to iterate over below
List<String> wordlist = new ArrayList<String>();
Set<String> wordset = new HashSet<String>();
// Basic loop, iterating over the elements of an array
// The body of the loop is executed once for each element of args[].
// Each time through, one element is assigned to the variable word.
System.out.println("Assigning arguments to lists...");
for (String word : args) {
System.out.print(word + " ");
wordlist.add(word);
wordset.add(word);
}
System.out.println();
// Iterate through the elements of the List now
// Since lists have an order, these words should appear as above
System.out.println("Printing words from wordlist " +
"(ordered, with duplicates)...");
for (
String word : wordlist) {
System.out.print((String)word + " ");
}
System.out.println();
// Do the same for the Set. The loop looks the same but by virtue
|