大家好:
英文名字叫做: Generic
我来自JDK1.5大家庭的一位新成员,我的本质就是参数化类型,就是说我所操作的数据 类型 被定义为一个参数。这个数据类型可以使用在类、接口和方法中,这样就可直呼其大名 泛型类、泛型接口盒泛型方法啦。
下面我来说说我的作用吧:
我主要是用来帮助javac编译器的,可以帮助限定集合的输入类型,使编译器挡住源程序非法输入。便器编译带类型说明的集合时,编译器会去除类型信息,使程序的运行不受影响。
在获取类时即可知道其数据类型这样我又为编译器解决了强制转换的烦恼 。
注: 泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率 。
我可是个有原则的人,要找我帮忙违反这几条规则我可不忙:
1.泛型的类型参数只能是类类型的(包括自定义类),不能是简单类型。
2.同一个泛型可以对相应多种不同的版本(因为参数类型不能确定),不同版本的泛型类实例 是不兼容的。
3.泛型的类型参数可以有多个。
4.泛型的参考类型还可以使用extends语句,如< T extends superclass > 习惯上称作为“有 界类型”。
5.泛型的参考类型还可以使用 通配符 ,例如: Class< ?> classType = Class.forName("java.lang.String");
好啦,到这里我的基本简历就介绍完了,下面就给你们再讲一个真是滴故事吧:
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());
}
}
public class GenDemo {
public static void main(String[] args){
//定义泛型类Gen的一个Integer版本
Gen<Integer> intOb=new Gen<Integer>(88);
intOb.showType();
int i= intOb.getOb();
System.out.println("value= " + i);
System.out.println("----------------------------------");
//定义泛型类Gen的一个String版本
Gen<String> strOb=new Gen<String>("Hello Gen!");
strOb.showType();
String s=strOb.getOb();
System.out.println("value= " + s);
}
}
谢谢大家的认真听取我的自我介绍,十分感谢!!
参考文献:
1.360百科http://baike.so.com/doc/788725.html
2.heima培训教程