1.泛型(JDK 1.5才出现,1.5以前只能凭开发人员的安全意识 )
1)出现的原因:是为了解决程序的安全性,保证程序的一种安全机制
2)好处:使用泛型,避免了类型的强制转换,简化了代码
将程序的问题,由运行时期提前到了编译时期;
保证程序的安全性;
3)泛型的定义格式:##############################################
集合类<数据类型> 变量 = new 集合类<数据类型>();
注意:数据类型为引用数据类型,不能使用基本类型,前后两个数据类型必须保持一致
4)泛型是如何保证程序的安全性????????
####将程序的问题,由运行时期提前到了编译时期;
5)ArrayList<E> E == 变量,传递什么类型的数据,这个变量就是什么类型
ArrayList<String> E ---> String
6)什么时候使用泛型?
使用一个类或接口的时候,定义方式带有<E>时,使用该接口或类时需要写<E>
2.自定义带泛型
1)自定义带泛型的类(带泛型的方法)
A.直接在类上定义泛型,
clase 类名 <T>{}
B.带泛型的方法,在方法上定义与类上定义的泛型不同的变量;对象调用方法可以直接传递数据类型,无类型限制
修饰关键字 <E> 返回值类型 方法名(){}
修饰关键字为权限修饰符和static等
C.带泛型的静态方法,不能定义与类相同的泛型变量;
2)自定义带有泛型的接口
1)实现类,实现接口,不实现泛型:不指定泛型,可以在创建对象时进行指定,比较灵活
注意:List<E> 接口和他的实现类ArrayList<E> 使用的是实现类不实现泛型
定义泛型接口:interface Face<E>
定义接口的实现类:class FaceImp<E> implements Face<E>
2)实现类,实现接口,实现泛型:如果实现泛型,则该实现类只能传入指定类型对象
定义泛型接口:interface Face<E>
定义接口的实现类:class FaceImp implements Face<String>
3.泛型的通配符和限定
1)定义: <?> 通配符,适合所有的类型,表示不明确的泛型
使用通配符不能使用强转
迭代示例:
//使用通配符做集合迭代,可以迭代任何Collection类型的集合
private static void method(Collection<?> c){
Iterator<?> it = c.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
2)泛型的限定:通配符本身不知道是哪种类型,可以通过指定?的子父类关系来做类型的限定
格式:
<? extends E> 可以传递E类型,也可以传递E的子类类型,此格式为泛型的上限限定
<? super E> 传递E类型,传递E类型的父类类型,此格式为泛型的下限限定
示例:
<? extends Company> 可以传递Company,也可以传递他的子类
====================我是可爱的分割线======================================
欢迎指正补充
|
|