一、自定义泛型类
自定义泛型结构:泛型类、泛型接口、泛型方法
自定义泛型类的内部结构(方法、属性、构造器等),可以使用类的泛型
如果定义了泛型类,实例化时没有指明类的泛型,则认为泛型类型为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);
}