从本质上讲, 软件开发就是把重复的思想以软件形式固定下来,软件开发技术多大是在尝试解决软件中层出不穷的重复问题,
-
针对代码重复,出现了子过程,函数,类的概念
-
针对逻辑重复和算法重复,出现了泛型(非常非常的经典总结)
-
针对设计重复出现了设计模式
所谓的泛型就是允许在定义类,接口,方法时使用类型形参,这个类型形参将在声明变量,创建对象,调用方法时候动态的指定(可称为类型实参)参数化类型,
类型参数对比方法,定义方法时候是形式参数调用方法是实参,泛型也是一样的,使用时候一定传递类型实参(创建对象).
=====================================================
2.泛型命名习惯(Type parameter naming conventions)
E-Element( used extensively by the java Collections Framework)
K-Key
N-Number
T-Type
V-value
S,U,V etc —2nd,3rd,4th types,这个地方的字符时可以随便写,R=return type 等
3.泛型可以使用的地方
类(包括抽象类),接口 ,方法(非泛型类里面可以定义泛型方法,只不过类型的作用域是方法范围)
4. 泛型的父子关系
list<String> 并不是 list<Object> 的子类。注意:但是 数组是可以的,Integer[] i = new Integer[5]; Number [] n = i;
为什么?
4.1概念协变逆变
协变和逆变指的是宽类型和窄类型在某种情况下的替换或交换的特性。宽代表父类,窄代表子类,就是父子类来回进行转换的过程
协变:就是用一个窄类型替代宽类型(父类型 对象=子类型 对象)
逆变:则用宽类型覆盖窄类型(强制类型转换)。 注意:泛型不支持协变,逆变才出现了通配符上下限
面向对象开发的语言的特性是多态,多态其实表现出来就是协变逆变,本质上来说就是程序绑定
4.2范型的目的?安全与通用
如果安全的角度来说list<object> = list<String> list<Object> = list<Integer>所以来说 list<Object>最终的类型你不知道是什么,也就缺乏了安全性,所以泛型不支持协变,逆变
5. 泛型的通配符?为什么会出现通配符?因为泛型不支持协变,逆变所以出现了范型通配符
? extends interface — 这个叫类型通配符上限
T extends interface —这个叫类型上限 --T 是可以add的 ?是不可以add的
泛型上限: ?extends T,T是上限, ?可以是类型T
泛型下限:?super T,T是下限, ?可以是类型T
List<? extends Object> lst = new ArrayList<Object>(); // This works
List<T extends Object> lst = new ArrayList<Object>(); // Compilation fails?,
extends —一般出现在泛型类,泛型方法的签名处,通配符也可以,上面错误很明显你已经知道了T类型了
extends 这样的如果前面是通配符的话 ? 是不可以add 的但是如果是绑定的上限 T extends Number 是可以add的
1万+

被折叠的 条评论
为什么被折叠?



