java的泛型机制
2018-07-10 本文已影响0人
名字_都被占了
<1>:java的泛型机制是javase1.5引入的
<2>:泛型擦除的概念:java中的泛型在编译之后生成的字节码文件中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器编译的时候去掉,这就是泛型的擦除。
<3>:擦除带来的问题就是不能转型,instanceof操作,new操作。
<4>:边界:如果用无界泛型参数调用的方法只是那些可以用Object调用的方法,但是如果给定边界,将这个参数限制为某个类型的子集,就可以调用这些类型子集中的方法。边界分为:上界<? extends Class>,下界<? super Class>
泛型中的注意点:
1:泛型的类型参数只能是类类型,不能是基本数据类型;
2:同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类型实例是不兼容的;
3:泛型的类型参数可以有多个;
4:泛型的参数类型可以使用extends语句,另外extends后面跟的第一个边界可以为类或接口,之后的均为接口,它们之间用&分隔;
5:泛型的参数类型还可以是通配符类型(?),如Class<?>c=ArrayList.class;这种通配符式的泛型是用在泛型类的引用变量中的,不能用在泛型类的定义中及new的实例中的,另外T的是用在泛型类的定义中的,比如<T extends ArrayMap>;
6:PECS原则:如果要从集合中读取类型T的数据,并且不能写入,可以使用 ? extends 通配符;(Producer Extends) 。如果要从集合中写入类型T的数据,并且不需要读取,可以使用 ? super 通配符;(Consumer Super) ;如果既要存又要取,那么就不要使用任何通配符。
参考文章:
https://blog.csdn.net/jeffleo/article/details/52250948