



package com.atguigu.java1;import org.junit.Test;import java.util.List;/** * 如何自定义泛型结构:泛型类、泛型接口;泛型方法。 * * * @author Dxkstart * @create 2021-05-27 18:47 */public class GenericTest2 {    @Test    public void test1(){        //如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型        //要求:如果大家定义了类是带泛型的,建议在实例化时要指明类的泛型。        Order order = new Order();        order.setOrderT(123);        order.setOrderT("ABC");        //建议:实例化时指明类的泛型        Order<String> order1 = new Order<String>("orderAA",1001,"order:AA");        order1.setOrderT("AA:hello");    }    @Test    public void test2(){        SubOrder sub1 = new SubOrder();        //由于子类在继承泛型的父类时,指明了泛型类型。则实例化子类对象时,不再需要指明泛型。        sub1.setOrderT(1112);        SubOrder1<String> sub = new SubOrder1<>();        sub.setOrderT("order2...");    }    @Test    public void test3(){        Order<String> order = new Order<>();        Integer[] arr = {1, 2, 3, 4};        //泛型方法在调用时,指明泛型参数的类型。        List<Integer> list = order.copyFromArrayToList(arr);        System.out.println(list);    }}
package com.atguigu.java1;import java.util.ArrayList;import java.util.List;/** * 自定义泛型类 * * @author Dxkstart * @create 2021-05-27 18:40 */public class Order<T> {    String orderName;    int orderId;    //类的内部结构就可以使用类的泛型    T orderT;    //构造器    public Order() {    }    public Order(String orderName, int orderId, T orderT) {        this.orderName = orderName;        this.orderId = orderId;        this.orderT = orderT;    }    //方法    //如下的方法都不是泛型方法    public T getOrderT() {        return orderT;    }    public void setOrderT(T orderT) {        this.orderT = orderT;    }    @Override    public String toString() {        return "Order{" +                "orderName='" + orderName + '\'' +                ", orderId=" + orderId +                ", orderT=" + orderT +                '}';    }    //静态方法中不能使用类的泛型。//    public static void show(T orderT){//        System.out.println(orderT);//    }    //泛型方法    //泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。    //换句话说:泛型方法与所属的类是不是泛型类都没有关系    //泛型方法,可以声明为static的。原因:泛型参数是在调用方法时确定的。并非在实例化类时确定。    public <E> List<E> copyFromArrayToList(E[] arr){        ArrayList<E> list = new ArrayList<E>();        for (E e: arr){            list.add(e);        }        return list;    }}
package com.atguigu.java1;/** * @author Dxkstart * @create 2021-05-27 18:56 */public class SubOrder extends Order<Integer>{// SubOrder:不是泛型类}
package com.atguigu.java1;/** * @author Dxkstart * @create 2021-05-27 19:02 */public class SubOrder1<T> extends Order<T>{//SubOrder1<T>:仍然是泛型类}