1、Java泛型背景
Java泛型是JDK1.5时引入的新特性之一,提供了编译时期的类型安全检测机制,由于历史原因,Java泛型的实现方式有点特殊,通过类型擦除等方法实现,其保证了JDK的兼容性。
2 、泛型是什么
Java泛型又称为参数化类型,可以将原来形参的类型当做参数进行传递,Java中主要使用方式有类泛型,接口泛型,方法泛型。
集合类演示
public static void main(String[] arg) { List list1=new ArrayList(); list1.add(new Student()); list1.add(new Teacher()); List<Student>list2=new ArrayList<>(); list2.add(new Student()); list2.add(new Teacher()); // error }
class Student{} class Teacher{}
在集合类中,如果不使用泛型,将不会报错(在add的时候两者都被转换成了Object类型),这样将导致在取出数据强转的时候有可能出现转换错误。如果使用泛型,那么在编译时就会出错,不会到转换时出错。
3、 类泛型的使用
顾名思义就是泛型作用在类上,如下示例所示:class Person<T>{ private T name; public T getName() { return name; } public void setName(T name) { this.name = name; } }
class Person<T,U> { private T name; private U age; public T getName() { return name; } public void setName(T name) { this.name = name; } public U getAge() { return age; } public void setAge(U age) { this.age = age; } }
如上所示, 通过在声明类时加上具体类型,就可以使用,也可以同时使用多个泛型参数
4、泛型接口的使用
如下所示:
class Student<U> implements Person<U>{ @Override public U SayHello() { return null; } } interface Person<T> { T SayHello(); }
注意到,具体泛型名称由T变成U,这是不影响的,泛型名称可以随便用,可以使用K,V,M,N等等,使用T只是大家的规范而已
5、泛型方法的使用
class Person<T>{ public void sayHello(T s){ // 此T依据类T System.out.println(s); } public <T> void sayHello2(T s){ //此T依据方法T System.out.println(s); } public <U> void sayHello3(U s){ //此U依据类U System.out.println(s); } }
上面方法中依据的泛型是不一样的,Hello2的命名不好,很容易造成混淆,Hello2与Hello3就是泛型方法的使用,根据具体的泛型方法的使用,根据传入的值的类型,作为泛型
后续待更新