前言:
打好基础,daydayup!
泛型
1,认识泛型:
定义类,接口,方法时,同时声明了一个或多个类型变量(例:<E>),称为泛型,泛型接口,泛型方法,这些统称为泛型。
以ArrayList语句为例:
ArrayList<E> 对象 = new ArratList<>();
ArrayList没声明变量时,可以添加任何对象;但声明变量后,只能添加指定对象。
2,泛型原理:
泛型原理就是把具体的数据类型作为参数传给类型变量。如下图:在使用ArrayList语句时,ArrayList会把数据类型传给源码中的类型变量。
3,泛型作用
泛型提供了在编译阶段约束所能操作的数据类型,可以避免强制转换及替他数据异常。
4,自定义泛型
1)自定义泛型类
表达方式:
修饰符 class 类名<类型变量,类型变量...>{...}
例:
public class ArrayList<E> {
内容
}
实验1:
定义一个泛型源码,使其可以存储数据也可以取出数据。
操作如下图:
public class fandemo<A>//类型变量建议用大写英文字母
{
private Object[] arr = new Object[10];
//定义一个object数组,方便存储不同类型数据
private int size; //设置数据(方便存入数组)
public boolean add(A a){
arr[size++] = a; //把数据存入数组
return true;
}
public A get(int index){ //
设置索引 return (A)arr[index];// 通过索引返回数组
}
}
结果如下:
fandemo声明<String>变量时,只能添加指定对象。同时可以通过get方法访问数组
2)自定义泛型接口
表达方式:
修饰符 interface 接口名<类型变量,类型变量...>{...}
例:
public interface fan <E>{...}
实验2:
定义一个泛型数据处理接口,使其可以添加数据也可以取出数据。
操作如下:
public interface date<E> {
void add(E e);
ArrayList<E> get(String name);
}
随后创建一个cardate用来承接接口便可。
3)自定义泛型方法
表达如下:
修饰符 <类型变量,类型变量...> 返回值类型 方法名 (形参列表){...}
例:
public static <T> T fangfa(T t ){.
return t;
}
public static <T> void goo(T t ){...}
实验3:
创建一个泛型方法,使所有汽车类都可以使用,但汽车类以外的类不能使用
操作如下:
首先创建一个car类,并创建子类使其继承car。
其次创建一个泛型方法,并使其只能继承car及car的子类。
public static <T extends car> void go(ArrayList<T> cars){
}
然后使用方法即可
最后:由于方法仅限car及car的子类使用,其他的会报错。
结语:
泛型已经属于架构的语法了,初期能够读懂即可。整理结束,撒花!!