泛型
泛型 : 一种说不清楚的引用数据类型
格式 : <大写字母>
格式解释:
大写字母 :
1. 可以是任意的字母 <E>,<T>,<U>...
2. 可以是单个字母也可以是多个字母 <MVP> --> 一般情况都是用单个字母
3. 一个尖括号内可以表示一个或者多个泛型类型 <K,V>
如何使用:
例如看到一个类的定义上有泛型(例:ArrayList<E>),只需要在使用此类的时候使用具体的引用数据类型类名去替换泛型即可!(例: ArrayList<String>)
//泛型只能代表引用数据类型,若想代表基本数据类型必须使用基本数据类型的包装类型
当使用带有泛型的板块时,如果不理会泛型,泛型的默认数据类型是Object!
泛型通配符(重点)
格式: <?>
使用场景: 一般是配合集合在形参上定义
作用: 此方法可以接受任意泛型类型的集合对象
package com.atguigu.fanxing;
import java.util.ArrayList;
/*
Object > Number > Integer
泛型的通配符: (一般配合集合使用,用在形参上)
格式 <?>
*/
public class Demo {
public static void main(String[] args) {
//创建集合对象
ArrayList<Object> list1 = new ArrayList<>();
show(list1);
ArrayList<Number> list2 = new ArrayList<>();
show(list2);
ArrayList<Integer> list3 = new ArrayList<>();
show(list3);
//ArrayList<?> list = new ArrayList<>();
}
public static void show(ArrayList<?> list){
}
}
泛型的上限和下限(重点)
泛型的下限:
<? super 类型> :包含super后面的类型和super后面类型的父类型都可以
泛型的上限:
<? extends 类型> : 包含extends后面的类型和extendsr后面类型的子类型都可以
不管上限还是下限都包含 super/extends后面的类型
代码:
public class Demo1 {
public static void main(String[] args) {
//创建集合对象
ArrayList<Object> list1 = new ArrayList<>();
//show(list1); 此代码报错
ArrayList<Number> list2 = new ArrayList<>();
show(list2);
ArrayList<Integer> list3 = new ArrayList<>();
show(list3);
//ArrayList<?> list = new ArrayList<>();
}
//上限
public static void show(ArrayList<? extends Number> list){
}
}