下面的程序很容易理解的,加以兩個程序的對比,相信很容易理解generis特性。
OldList.Java
/**
* @author roson
*
* 2005-4-11
*/
package collection;
import Java.util.*;
public class OldList {
private void testList()
{
List list=new ArrayList();
list.add(new String("HelloWorld!"));
list.add(new String("goodbye!"));
list.add(new Integer(95));
printList(list);
}
private void printList(List list)
{
Iterator i=list.iterator();
while(i.hasNext())
{
String item=(String)i.next();
System.out.println("Item:"+item);
}
}
public static void main(String[] args) {
OldList old=new OldList();
old.testList();
}
}
能通過編譯,但是當執行到第三個打印時將報錯。
NewList.Java
/**
* @author roson
*
* 2005-4-11
*/
package collection;
import Java.util.*;
public class NewList {
private void testNew()
{
List
list.add(new String("HelloWorld!"));
list.add(new String("Goodbye!"));
//list.add(new Integer(95)); 這裡不能增加整形
printList(list);
}
private void printList(List list)
{
Iterator
while(i.hasNext())
{
String item=i.next();
System.out.println("Item:"+item);
}
}
public static void main(String[] args) {
NewList list=new NewList();
list.testNew();
}
}
在這裡如果加入注釋的那句,將不能通過編譯,不至於在運行時報錯。有利於提前檢查出錯誤。
OldLoop.Java
/**
* @author roson
*
* 2005-4-11
*/
package collection;
import Java.util.*;
public class OldLoop {
public static void main(String[] args) {
List list=new ArrayList();
list.add(new String("HelloWorld!"));
list.add(new String("goodbye!"));
for(Iterator i=list.iterator();i.hasNext();)
{
String item=(String)i.next();
System.out.println("Item:"+item);
}
}
}
NewLoop.Java
/**
* @author roson
*
* 2005-4-11
*/
package collection;
import Java.util.*;
public class NewLoop {
public static void main(String[] args) {
List
list.add(new String("HelloWorld!"));
list.add(new String("Goodbye!"));
for(String str:list) //比以前簡單多了吧
{
System.out.println("Item:"+str);
}
}
}
從以上兩個程序可以容易看出,第二個簡單多了 : )
討論:
這裡只以list為例,當然還有其它啦,比如 HashMaps,LinkLists 等Collection 。
J2se5.0還有很多地方改善,這裡就不多說了。不過可以參考英文文檔 j2se5 Nutshell 和 J2SE5 .一開始還覺得generis不好,但是看到jbss中有用到也覺得簡單於是就看了下文檔了,真的很方便噢。不妨一試!