自定义泛型类
例子:
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;
}
@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") //所以 "order:AA" 是 String类型的。
order1.setOrderT("AA:hello");
}
}
自定义泛型方法
1、泛型方法所属的类是不是泛型类没有关系。泛型方法只能说明这个方法是泛型方法。
2、泛型方法所在的类可以不是泛型类。也可以是泛型类,如果是,那么泛型方法的参数(如 <E.> )与泛型类的参数(如<T.>)可以没有任何关系,即不一定都是T。(说明:右下角的点 . 是没有的)
3、泛型方法在方法类型前加泛型结构 如<E.>
4、泛型方法可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在实例化类时确定。
例子:
public static <E> List<E> copyFromArrayToList(E[] arr){
ArrayList<E> list = new ArrayList<>();
for(E e : arr){
list.add(e);
}
return list;
}
补充:泛型接口的定义和泛型类的定义类似。