java基础之泛型
1、泛型定义
//当实例化泛型类对象时,指明泛型的类型,对应的类中所有的泛型的位置,都变为实例化中指定的泛型的类型。
//如果我们自定义了泛型类,但是在实例化时没有使用,那么默认类型是Object类。
//继承泛型类或者泛型接口时,可以指明泛型的类型;如果不指明泛型类型,那么子类也需要在加上泛型类型
不能再static、try-Catch语句中使用泛型。
不允许向声明为通配符集合类中写入对象(除了null)。public class Order<T> {
private String orderName;
private int orderId;
private T t;
List<T> list = new ArrayList<>();
public void add(){
list.add(t);
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
@Override
public String toString() {
return "Order [orderName=" + orderName + ", orderId=" + orderId
+ ", t=" + t + ", list=" + list + "]";
}
}
2、泛型方法
//声明泛型方法:当通过对象调用泛型方法时,指明泛型方法的类型 public <E> E getE(E e){
return e;
}
//实现数组到集合的复制
public <E> List<E> fromArrayToCollection(E [] e , List<E> list){
for(E e1: e){
list.add(e1);
}
return list;
}
/*
* 泛型与继承的关系:
* 若类A是类B的子类,那么List<A>就不是List<B>的子类
*/
3、通配符
/*
* 通配符 ? :
* List<A> 、 List<B> .. 都是List<?>的子类
*/
@Test
public void test5(){
List<?> list = null;
List<String> list1 = new ArrayList<>();
List<Object> list2 = new ArrayList<>();
list = list1;
list = list2;
//show(list1);
}