泛型

1.为什么要有泛型?

2.泛型的使用

//自定义泛型类
public class Order<T> {
    String name;
    int id;
    T orderT;

    public Order() {
    }

    public Order(String name, int id, T orderT) {
        this.name = name;
        this.id = id;
        this.orderT = orderT;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public T getOrderT() {
        return orderT;
    }

    public void setOrderT(T orderT) {
        this.orderT = orderT;
    }

    @Override
    public String toString() {
        return "Order{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", orderT=" + orderT +
                '}';
    }

    //泛型方法 : 注意,1.泛型方法所属的类是不是泛型类都没关系
    // 2.要在返回值的前面再加一个<E>
    //3.泛型方法可以声明为静态的 , 原因:泛型参数是在调用时确定的,而非实例化时确定
    public static <E> List<E> copyArrayToList(E[] array){
        List<E> list = new ArrayList<>();
        for (E e : array) {
            list.add(e);
        }
        return list;
    }
}
@Test
    public void method(){
        //实例化时指明泛型的类型
        Order<String> order1 = new Order<>("orderName",001,"admin");
        System.out.println(order1);

        //调用泛型方法
        Integer[] arr = new Integer[]{1,2,3,4,5};
        List<Integer> list = Order.copyArrayToList(arr);
        System.out.println(list);
    }

3.泛型使用的注意点:

4.通配符

//通配符的使用: ?
    //通配符的容器不能添加数据 List<?> , 但是可以读取数据list.get()
    /*
         有限制条件的通配符 :
         1. List<? extends A> list: 相当于 ?<=A , 就是说可以将A及A的子类赋值给list
         2. List<? super A> list: 相当于 ?>=A , 就是说可以将A及A的父类赋值给list
     *
     */

    @Test
    public void method3(){
        List<Object> list1=null;
        List<String> list2=null;

        //list1=list2; 错误的
        List<?> list = null;

        list=list1;
        list=list2;
    }

 

posted @ 2021-02-22 16:57  Anonymity_Zhang  阅读(42)  评论(0编辑  收藏  举报