【Java进阶】泛型的理解
1. 什么是泛型?
泛型是Java为了解决多类型兼容问题而引入的一种语法类型,比如在集合中放入各种不同类型的元素,如果使用Object类对类型进行声明,存在着类型转换造成的不安全的问题,但是引入泛型之后,泛型可以表示任意类型,而且对于特定的对象,泛型表示的类相同,即已经声明具体类型的泛型类只能使用该种具体类型。
2. 泛型类及其界定
jdk中存在着多种泛型类或者泛型接口,如List,Map,Set等都实现了泛型,自定义泛型类如下:
public class Test3<E> {
E element;
public ArrayList<Test3<E>> arrayList = new ArrayList<>();
}
在类后面加<E>其中E可以为任意字母,即表明该类为泛型类,泛型类也可以继承,通过继承说明该泛型的上界,即最多“泛”到哪一级,再往下或者往上就不可以表示了。比如下面的代码:
public static <T extends Test> T add(T a, T b) {
return a;
}
就是表示这里的泛型T只能表示Number及其子类。
public static <T> void add(Test3<? super Test> t) {
System.out.print(" ");
}
这里就表示Test3类型中的元素只能放Test及其父类
3. 泛型方法
泛型方法主要运用于对于某个方法需要传入泛型参数时的情形,如下面的方法,用来输出该泛型的具体类型.
public static void main(String[] args) {
getclass(new non_overlapping_intervals());
}
public static <T> void getclass(T t) {
System.out.println(t.getClass().getTypeName());
}
只有当参数需要泛型时,才需要引入泛型方法。
泛型方法的具体格式如下:
\[修饰符 <T,E,……> 返回值类型~方法名称~(形参列表) \{ \\
方法体……\\
\}
\]
4. 泛型擦除
所谓泛型擦除,是指泛型的应用和检查只存在于编译阶段,在编译阶段解决了所有类型的冲突和转换问题,到了运行阶段就无需再进行检查,所以泛型到了运行阶段就被擦除了,泛型的具体类型并不会影响泛型类的类型。

浙公网安备 33010602011771号