下面的程序很容易理解的,加以两个程序的对比,相信很容易理解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<String> list=new ArrayList<String>();
list.add(new String("HelloWorld!"));
list.add(new String("Goodbye!"));
//list.add(new Integer(95)); 这里不能增加整形
printList(list);
}
private void printList(List list)
{
Iterator<String> i=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<String> list=new ArrayList<String>();
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中有用到也觉得简单于是就看了下文档了,真的很方便噢。不妨一试!