JDK1.5之Generics
JDK1.5
2023-06-13 09:13:45 时间
Generics是JDK1.5一个最重要的特性,主要用来处理Collection。
以下代码在JDK1.5调试通过。
代码实例1:Demo.java
packagemaoxiang.examples.jdk15.generics;
importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.HashMap;
importjava.util.LinkedList;
importjava.util.List;
importjava.util.Map;
/**
*@author毛翔
*
*演示如何使用Generics特性。代码来自于Generics教程:
*http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
*
*Generics类似于C++中的模板。
*区别:
*1.
*2.
*/
publicclassDemo{
publicstaticvoidmain(String[]args){}
/**
*最简单的用法
*/
publicvoidTest1(){
//以前的用法
//ListmyIntList=newLinkedList();//1
//myIntList.add(newInteger(0));//2
//Integerx=(Integer)myIntList.iterator().next();//3需要强制转换
//1.5的用法
ListmyIntList=newLinkedList();//1"
myIntList.add(newInteger(0));//2"
Integerx=myIntList.iterator().next();//3"
}
/**
*匿名字符的用法
*/
publicvoidTest2(){
Listlist=newArrayList();
//通过匿名字符打印一个集合
Wildcards(list);
Wildcards1();
/*
*如果Wildcards2定义为Wildcards2(Listshapes)
*以下调用错误
*/
Wildcards2(list);
}
publicvoidWildcards(Collection<?>c){
//以前的用法
//Iteratori=c.iterator();
//for(intk=0;k<c.size();k++){
//
log(i.next());
//}
//1.5的用法
//Collection>c表示
for(Objecte:c){
log(e);
}
}
publicvoidWildcards1(){
//Collection>c=newArrayList();
//c.add(newObject());//compiletimeerror
//以上为错误的用法,因为不能确定c的类型,不能使用add,但get可以。正确的用法如下:
ArrayListc=newArrayList();
c.add("test");
List<?>list=c;
log(c.get(0));
}
publicvoidWildcards2(List<?extendsShape>shapes){
//Listshapes定义只能接受Listshapes,也不能接受List
for(Shapes:shapes){
s.draw();
}
//以下写法错误,因为为参数申明为extendsShpape,无法确定Rectangle为Shape子类,属于不安全调用
//shapes.add(0,newRectangle());
MapallDrivers=newHashMap();
Census.addRegistry(allDrivers);
//以下写法允许,因为drivers明确定义,
Listdrivers=newArrayList();
Census.add(drivers);
}
/**
*GenericMethods的用法
*
*/
publicvoidTest3(){
//适用于各种类型的函数
Object[]oa=newObject[100];
Collection
以下代码在JDK1.5调试通过。
代码实例1:Demo.java
packagemaoxiang.examples.jdk15.generics;
importjava.util.ArrayList;
importjava.util.Collection;
importjava.util.HashMap;
importjava.util.LinkedList;
importjava.util.List;
importjava.util.Map;
/**
*@author毛翔
*
*演示如何使用Generics特性。代码来自于Generics教程:
*http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf
*
*Generics类似于C++中的模板。
*区别:
*1.
*2.
*/
publicclassDemo{
publicstaticvoidmain(String[]args){}
/**
*最简单的用法
*/
publicvoidTest1(){
//以前的用法
//ListmyIntList=newLinkedList();//1
//myIntList.add(newInteger(0));//2
//Integerx=(Integer)myIntList.iterator().next();//3需要强制转换
//1.5的用法
List
myIntList.add(newInteger(0));//2"
Integerx=myIntList.iterator().next();//3"
}
/**
*匿名字符的用法
*/
publicvoidTest2(){
List
//通过匿名字符打印一个集合
Wildcards(list);
Wildcards1();
/*
*如果Wildcards2定义为Wildcards2(List
*以下调用错误
*/
Wildcards2(list);
}
publicvoidWildcards(Collection<?>c){
//以前的用法
//Iteratori=c.iterator();
//for(intk=0;k<c.size();k++){
//
log(i.next());
//}
//1.5的用法
//Collection>c表示
for(Objecte:c){
log(e);
}
}
publicvoidWildcards1(){
//Collection>c=newArrayList
//c.add(newObject());//compiletimeerror
//以上为错误的用法,因为不能确定c的类型,不能使用add,但get可以。正确的用法如下:
ArrayList
c.add("test");
List<?>list=c;
log(c.get(0));
}
publicvoidWildcards2(List<?extendsShape>shapes){
//List
for(Shapes:shapes){
s.draw();
}
//以下写法错误,因为为参数申明为extendsShpape,无法确定Rectangle为Shape子类,属于不安全调用
//shapes.add(0,newRectangle());
Map
Census.addRegistry(allDrivers);
//以下写法允许,因为drivers明确定义,
List
Census.add(drivers);
}
/**
*GenericMethods的用法
*
*/
publicvoidTest3(){
//适用于各种类型的函数
Object[]oa=newObject[100];
Collection