泛型的好处和定义
- ArrayLIst<> arr=new ArrayList<>();就是一种泛型;
- 泛型的好处:泛型就是为了告诉编译器我需要存什么数据;例如:ArrayList中可以有Integer String Long等等
泛型用在类 方法和接口中
1.定义泛型类
public class MyArrayList<E> {
public void add(E e){
}
public E get(){
return null;
}
}
2.定义泛型方法
public class FanXing<E> {
public void fun(E e,E e1,E e2,E e3){//方法中可以定义多个泛型
System.out.println("泛型1"+e);
System.out.println("泛型2"+e1);
System.out.println("泛型3"+e2);
System.out.println("泛型4"+e3);
}
3.定义泛型接口
public Interface Animal<E>{//只能传递E类型的数据
public void fun(E e){
}
}
泛型的通配符
//1. <?> : 表示可以是任何类型的泛型
public class Test {
public static void main(String[] args) {
ArrayList<String> arr=new ArrayList<>();
ArrayList<Integer> arr1=new ArrayList<>();
arr.add("ads");
arr1.add(123);
fun(arr);
fun(arr1);
}
//<?>可以表示任何类型
private static void fun(ArrayList<?> arr) {
System.out.println(arr);
}
}
//2. <? extends E> : 可以是E级以下的任何子类
//创建一个Student类和Teacher类和person类
//Student类继承person类
//Teacher继承person类
public class Test {
public static void main(String[] args) {
ArrayList<Student> arr=new ArrayList<>();
ArrayList<Teacher> arr1=new ArrayList<>();
ArrayList<Persion> per=new ArrayList<>();
fun(arr);//调用fun方法可以用Persion以下的所有子类类型
//fun(per);错误,此类为父类,
}
//<?>可以表示任何类型
private static void fun(ArrayList<?extends Persion> arr) {
}
}
//2.定义一个方法,可以接收"具有Student或者Teacher泛型的集合"
public static void print2(ArrayList<? extends Person> list){
}
}
//3. <? super E> : 可以使E级以上的任何父类
public class Test {
public static void main(String[] args) {
ArrayList<Student> arr=new ArrayList<>();
ArrayList<Teacher> arr1=new ArrayList<>();
ArrayList<Persion> per=new ArrayList<>();
fun(per);//正确,此类为父类,条件是:父类以上的任意类
// fun(arr);//错误该类为persion的子类
// fun(arr1);//错误该类为persion的子类
}
//<?>可以表示任何类型
private static void fun(ArrayList<?super Persion> arr) {
}
}