1、泛型简介 JDK1.5以后引入
泛型可以在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的。
泛型的原理就是”类型的参数化“,即把类型看做参数。也就是说把所要操作的数据类型看做参数,就像方法的形式参数是运行时传递的值的占位符一样。
简单的说,类型变量扮演的角色就如同一个参数,它提供给编译器用来类型检查的信息。
泛型可以提高代码的扩展性和重用性。
示例:
public class GenClass <T>{
private T obj;
public GenClass (T obj){
this.obj = obj;
}
public T getObj(){
return obj;
}
public void setObj(T obj){
this.obj = obj;
}
}
class Cla<T>
{
T a;
public Cla(T a){
this.a = a;
}
public T returndate(){
return a;
}
}
public class Test {
public static void main(String[] args) {
Cla<Integer> c1 = new Cla<Integer>(10);
System.out.println(c1.returndate());
Cla<String> c2 = new Cla<String>("zheng");
System.out.println(c2.returndate());
}
}
2、泛型类及特点
1.泛型的类型参数可以是泛型类
2.泛型类可以同时设置多个类型参数
3.泛型类可以继承泛型类
4.泛型类可以实现泛型接口
泛型的类型参数可以是泛型类:
class Cla<T>
{
T a;
public Cla(T a){
this.a = a;
}
public T returndate(){
return a;
}
}
public class Test {
public static void main(String[] args) {
Cla<Cla<Integer>> c1 = new Cla<Cla<Integer>>(new Cla<Integer>(100));//泛型的类型参数可以是泛型类
System.out.println(c1.returndate().returndate());
}
}
3、限制泛型可用类型
在定义泛型类别时,默认在实例化泛型类的时候可以使用任何类型,但是如果想要限制使用泛型类型时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口。
当没有指定泛型继承的类型或接口时,默认使用extends Object,所以默认情况下任何类型都可以作为参数传入。