【Java梳理】泛型

2017-12-12  本文已影响0人  田文健

泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。

java也支持泛型,List就是很好的例子。现在我们写一个支持泛型的类:

//有两个泛型参数的例子
public class Example<T, T2> {
    T t;
    T2 t2;
    private T method(T2 t2){
        return t;
    }
}

泛型的使用:

Example<String, Integer> example = new Example<>();

除了泛型类之外,可以单独定义泛型方法:

public static <T> T method(T t){
        return t;
    }

泛型方法在定义时,参数必须要包含泛型参数的类型。
泛型可以用通配符指定,<? extends T>和 <? super T>,两者的主要区别

       List<? super Animal> list;
       list = new ArrayList<Object>();
       
       
       List<? extends Animal> list2;
       list2 = new ArrayList<Pig>();

理解这里的话重点是List<? super Animal>代表了一种限定范围了的不定类型,它可以是List<Object>也可以是List<Animal的其他父类>, extends的情况也同理。
考虑add和get的情况, super 可以add Animal和他的子类的对象,因为必然可以向上转型成 Animal的父类。get不能知道get出的是什么类型。
extends 可以get到 Animal 对象,而不能把Animal或者它的子类add进去。

另外在Java运行时,泛型是不保存类型信息的,所有的都相当于List<Object>,泛型的约束都是在编译器中。

上一篇 下一篇

猜你喜欢

热点阅读