1、什么是泛型?
泛型就是一个标签:<数据类型> , 泛型可以在编译阶段约束只能操作某种数据类型。
泛型和集合都只能支持引用数据类型,不支持基本数据类型
2、泛型的好处
泛型在编译阶段约束了操作的数据类型,从而不会出现类型转换异常。
体现的是Java的严谨性和规范性,数据类型,经常需要进行统一!
3、自定义泛型类
泛型类的概念:
使用了泛型定义的类就是泛型类。
泛型类的格式:
修饰符 class 类名<泛型变量>{
}
泛型变量建议使用 E , T , K , V
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class _202174Demo {
public static void main(String[] args) {
MyArrayList<String> a = new MyArrayList<>();
a.add("vae");
a.add("vae");
a.add("许嵩");
System.out.println(a);
}
}
class MyArrayList<E> {
private ArrayList<E> arrayList = new ArrayList<>();
public void add(E e) {
arrayList.add(e);
}
public void remove(E e) {
arrayList.remove(e);
}
@Override
public String toString() {
return arrayList.toString();
}
}
泛型方法的定义格式:
修饰符 <泛型变量> 返回值类型 方法名称(形参列表){
}
注意:方法定义了是什么泛型变量,后面就只能用什么泛型变量。
泛型类的核心思想:是把出现泛型变量的地方全部替换成传输的真实数据类型。
public static void main(String[] args) {
Integer[] arr = {12,123,214,6,4,3};
System.out.println(arrToString(arr));
}
public static <T> String arrToString(T[] arr) {
StringBuilder stringBUilder = new StringBuilder();
stringBUilder.append("[");
for (int i = 0; i < arr.length; i++) {
if (arr != null && arr.length > 0)
stringBUilder.append(i == arr.length - 1 ? arr[i] : arr[i] + ",");
}
stringBUilder.append("]");
return stringBUilder.toString();
}
泛型接口的格式:
修饰符 interface 接口名称<泛型变量>{
}
泛型接口的核心思想,在实现接口的时候传入真实的数据类型
这样重写的方法就是对该数据类型进行操作!
interface People<E> { void run(); }
4、泛型通配符
通配符:?
?可以用在使用泛型的时候代表一切类型。
E , T , K , V是在定义泛型的时候使用代表一切类型。
泛型的上下限:
? extends Car : 那么?必须是Car或者其子类。(泛型的上限)
? super Car :那么?必须是Car或者其父类。(泛型的下限。不是很常见)
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class _202174Demo {
public static void main(String[] args) {
List<Bao> baos = new ArrayList<>();
baos.add(new Bao());
run(baos);
List<Ben> bens = new ArrayList<>();
bens.add(new Ben());
run(bens);
}
// 注意List<? extends Car>可以接任何以Car为父类的集合
public static void run(List<? extends Car> cars) {
}
}
class Car {}
class Ben extends Car{}
class Bao extends Car{}