大家好我是不想做菜鸟的菜鸟程序员:今天整理分享一下关于泛型阶段的学习,开始之前那先分享首喜欢的诗:
终身误
曹雪芹
都道是金玉良姻,俺只念木石前盟。
空对着,山中高士晶莹雪;终不忘,世外仙姝寂寞林。
叹人间,美中不足今方信:纵然是齐眉举案,到底意难平。
1.泛型定义
所谓泛型,就是允许在定义类、接口、方法时使用类型参数,这个类型形参将在声明变量,创建对象调用方法时动态地指定。
2.泛型类
package cn.itlaobing.java;
/**
* 泛型类
* @author MR.Y
*
* @param <T>
*/
public class MyArrayList<T> {
//可以使用泛型定义实例变量(static变量除外)
private T info;
//构造方法内可以使用泛型
public MyArrayList(T info) {
super();
this.info = info;
}
//成员方法参数和返回值可以使用泛型
public T getInfo() {
return info;
}
public void setInfo(T info) {
this.info = info;
}
}
3.泛型接口
package cn.itlaobing.java;
/**
* 泛型接口
* @author MR.W
*
* @param <T>
*/
public interface IList<T> {
//接口抽象方法中可以使用泛型作为参数
void add(T t);
//使用泛型作为抽象方法返回值
T remove(T t);
}
4.泛型方法
package cn.itlaobing.java;
public class MyMethod {
/**
* 泛型方法
* @param <T>
* @param t
* @param index
*/
public <T> void add(T t,int index) {
}
/**
* 泛型作为返回值
* @param <T>
* @return
*/
public <T> T pop() {
T t = null;
return t;
}
/**
* 静态泛型方法
* @param <T>
* @param t
*/
public static <T> void sort(T t){
}
/**
* 静态泛型方法返回值为泛型
* @param <T>
* @return
*/
public static <T> T shuffle() {
T t = null;
return t;
}
}
5.类型擦除
编码时利用泛型写的类型参数,编译器会在编译时去掉,这称为类型擦除。
泛型主要用于编译阶段,编译后生成的字节码class文件不包含泛型中的类型信息。涉及到的类型转换依然是普通的强制类型转换。类型参数在编译后会被替换成object,运行时虚拟机并不知道泛型。
6.通配符上限
/**
* 泛型的类型只能是Number或者Number的子类
* @author MR.W
*
* @param <T>
*/
public class UpperLimit<T extends Number> {}
7.通配符下限
/**
* 泛型只能传入Integer和Integer的父类
* @param c
*/
public void sort(Comparator<? super Integer> c) {}