Java高级编程十:泛型的使用

155 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

第十章 泛型

1. 为什么要有泛型

  • 指定集合里边只能装某种数据类型
  • 编译时就会进行检查,防止类型错误
  • 异常类不能是泛型

2.泛型使用范例

public class DAO<T>{
    //表的共用操作
    //增删改查
}

public class StudentDAO extends DAO<Student>{
    //只能操作某一个表的DAO
}
  1. 泛型方法的使用
//当返回值类型不确定的时候可以使用泛型方法
public <E> e test(){}

3.泛型在继承方面的体现

3.1 泛型在继承方面的体现

List<Object> list = null;
List<String> li = null;
//不可以这么使用,此时的list和li不具有子父类关系
//list = li;

3.2 通配符的使用

  • 通配符 ?
@Test
public void test(){
    List<Object> list1 = null;
    List<String> list2 = null;
    List<?> list = null;
    
    list = list1;
    list = list2;
}
//List<?> 只可以添加null 其他都不可以添加
  • 有限制条件的通配符

? extends A:

​ G<? extends A> 可以作为 G 和 G 谷类的,其中B 是 A 的子类

? super A:

G<? extends A> 可以作为 G 和 G 谷类的,其中B 是 A 的父类

public class Person{}
class Student extends Person{}
class Test{
    @Test
    public void test(){
        List<? extends Person> list = null;
        List<? super Person> list2 = null;
        
        List<Student> s = null;
        List<Person> p = null;
        List<Object> o = null;
        
        list = s;
        list = p;
        //不可以
        //list = o;
        //不可以
        //list2 = s;
        list2 = p;
        list2 = o; 
    }
}