在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,
“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可
以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时
候才出现异常,这是一个安全隐患。 泛型的好处是在编译的时候检查类型安全,并且所有
的强制转换都是自动和隐式的,提高代码的重用率。
package fanxing;
public class Gen<T> {
private T ob;
public Gen(T ob){
this.ob=ob;
}
public T getOb() {
return ob;
}
public void setOb(T ob) {
this.ob = ob;
}
public void showType(){
System.out.println("T的实际类型是:"+ob.getClass().getName());
}
}
package fanxing;
public class GenDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Gen<Integer> intob=new Gen<Integer>(88);
intob.showType();
int i=intob.getOb();
System.out.println("value:"+i);
System.out.println("---------------");
Gen<String> strob=new Gen<String>("hello Gen");
strob.showType();
String str=strob.getOb();
System.out.println("value:"+str);
System.out.println("---------------");
}
}
运行结果:
T的实际类型是:java.lang.Integer
value:88
---------------
T的实际类型是:java.lang.String
value:hello Gen
---------------
不使用泛型:
package fanxing;
public class Gen2 {
private Object ob;
public Gen2(Object ob){
this.ob=ob;
}
public Object getOb() {
return ob;
}
public void setOb(Object ob) {
this.ob = ob;
}
public void showType(){
System.out.println("T的实际类型是"+ob.getClass().getName());
}
}
package fanxing;
public class GenDemo2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Gen2 intob=new Gen2(new Integer(88));
intob.showType();
int i=(Integer)intob.getOb();
System.out.println("value:"+i);
System.out.println("---------------");
Gen2 strob=new Gen2(new String("hello Gen2"));
strob.showType();
String str=(String)strob.getOb();
System.out.println("value:"+str);
System.out.println("---------------");
}
}
运行结果为:
T的实际类型是java.lang.Integer
value:88
---------------
T的实际类型是java.lang.String
value:hello Gen2
---------------
迭代器:
Iterator迭代器是一个对象,它的工作是遍历并选择序列中的对象,客户端程序列不关心序列底层的结构。迭代器通常被称为"轻量级"对象;创建它的代价很小。
迭代器和泛型配合使用恩能起到很好的作用