泛型
由于Obiect可以接收所有类型,用户设置时可以设置任意类型,但是取出值时需要强转。(强转就可能报错)1、在编译阶段无法检测。
2、JDK1.5引入了泛型,所谓的泛型指的就是在定义类或者方法时,参数的类型暂定,只有在使用时才明确类型。
3、泛型类的语法,这里的T就称为类型参数,可以指代任意类型,只有在使用该类时,才明确类型~
public class Mypoint<T> {
private T X;
private T Y;
}
一、泛型使用
1、定义MyPoint类时,x和y的类型不确定,但是使用MyPoint类型时,x和y一定是相同数据类型。
2、①泛型类中的类型参数一般使用单个的大写字母
②当泛型类中需要多个类型参数时,直接在<>使用”,"分隔,使用不同的大写字母来代替。
一般来说,泛型的类型参数使用的大写字母就是如下几个字母
E - 普通元素含义,表示单个泛型元素
K,V =>搭配使用,表示键值对对象
T 普通泛型类型参数代号
S 也可以指代泛型参数
二、泛型方法的定义与使用
语法:
访问修饰符 [static]<类型参数>方法名称(){}
1.泛型方法始终以自己的类型参数为准,与类中的类型参数无关。因此,若类中存在泛型方法,一般不要使用重复的大写字母。
public class GenericityMethod<T> {
private T X;
public <E> void fun(E e){
System.out.println(e);
}
public static void main(String[] args) {
GenericityMethod <Integer> Method = new GenericityMethod<>();
Method.fun("hahhahahaha");
}
}
2、泛型方法可以独立存在,泛型方法所在的类可以不是泛型类~
三、泛型接口的定义与使用
1、子类实现泛型接口
①子类仍然是泛型类
子类仍然保留泛型,没有明确类型print可以接收任意类型
②子类实现泛型接口时,就明确具体类型
当前子类明确具体类型,print只接收String类型的参数
四、泛型数组
不能new 类型参数的数组
private T[] value; // 可以声明
value = new T[10]; // 错误
JVM中没有泛型数组,要使用泛型数组,统一使用Obiect数组!
public class GenericityArray<T> {
private Object[] value = new Object[10];
// 当前vaLue 数组中存储的元素个数
private int size;
// 在使用这个数组时,增删查改,使用方法来操作
//①
public void add(T t) {
value[size++] = t;
}
public T get(int index) {
return (T) value[index];
}
//②
public void add1(Object val) {
value[size++] = val ;
}
public Object get1(int index) {
return value[index];
}
public static void main(String[] args) {
GenericityArray<Integer> gennericArray = new GenericityArray<>();
//这个绝对不会错
gennericArray.add(10);
int a = gennericArray.get(0);
//失去约束,需要强转否则报错。
gennericArray.add1("123");
int b = (int)gennericArray.get1(0);
}
关于该数组的所有增删改查使用方法来操作,其中方法使用类型参数