一、自定义泛型类

自定义泛型结构:泛型类、泛型接口、泛型方法

自定义泛型类的内部结构(方法、属性、构造器等),可以使用类的泛型

如果定义了泛型类,实例化时没有指明类的泛型,则认为泛型类型为Object类型

要求:如果定义了泛型类,在实例化时,要指明类的泛型;

/**
 * 自定义泛型类
 */
public class Order<T> {

    private String orderName;

    private Integer orderAge;

    //自定义泛型类的内部结构(方法、属性、构造器等),可以使用类的泛型
    private T orderT;

    public Order() {
    }

    public Order(String orderName, Integer orderAge, T orderT) {
        this.orderName = orderName;
        this.orderAge = orderAge;
        this.orderT = orderT;
    }

    public String getOrderName() {
        return orderName;
    }

    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }

    public Integer getOrderAge() {
        return orderAge;
    }

    public void setOrderAge(Integer orderAge) {
        this.orderAge = orderAge;
    }

    //自定义泛型类的内部结构(方法、属性、构造器等),可以使用类的泛型
    public T getOrderT() {
        return orderT;
    }

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

    @Override
    public String toString() {
        return "Order{" +
                "orderName='" + orderName + '\'' +
                ", orderAge=" + orderAge +
                ", orderT=" + orderT +
                '}';
    }
}
public class GenericTest2 {
    @Test
    public void test01() {
        //如果定义了泛型类,实例化时没有指明类的泛型,则认为泛型类型为Object类型
        //要求:如果定义了泛型类,在实例化时,要指明类的泛型;
        Order order = new Order();
        order.setOrderT(1);
        order.setOrderT("很好");

        //如果定义了泛型类,实例化时应指明类的泛型
        Order<Integer> order1 = new Order<>();
        order1.setOrderT(1);
    }
}

二、泛型类的继承特点

子类继承泛型类,泛型类未指明泛型类型,那么子类仍然为泛型类

子类继承泛型类,泛型类指明泛型类型

/**
 * 子类继承泛型类,泛型类未指明泛型类型
 */
public class Sub1Order<T> extends Order<T> {
}
/**
 * 子类继承泛型类,泛型类指明泛型类型
 */
public class Sub2Order extends Order<Integer> {

}
@Test
    public void test01() {
        //子类继承泛型类,泛型类未指明泛型类型,那么子类仍然为泛型类
        Sub1Order<Integer> sub1Order = new Sub1Order<>();
        sub1Order.setOrderT(1);

        //子类继承泛型类,泛型类指明泛型类型
        Sub2Order sub2Order = new Sub2Order();
        sub2Order.setOrderT(1);
    }