generic
泛型
简介
- 泛型又称参数化类型,是Jdk5.0出现的新特性,解决数据类型的安全性问题
- 在类声明或实例化时只要指定好需要的具体的类型即可。
- Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。同时,代码更加简洁、健壮
- 泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。
优点:
1)编译时,检查添加元素的类型,提高了安全性
2)减少了类型转换的次数,提高效率
3)不再提示编译警告
语法:
泛型的声明:
interface接口
比如: List , ArrayList
说明:
1)其中,T,K,V不代表值,而是表示类型。
2)任意字母都可以。常用T表示,是Type的缩写
实例化:
1) List<String> strList = new ArrayList<String>();
2) Iterator<Customer> iterator = customers.iterator);
使用时注意事项:
-
interface List
{}, public class HashSet 0..等等 说明:T,E只能是引用类型
Listlist = new ArrayList 0); //T List
list2 =new ArrayList 0; //F -
在指定泛型具体类型后,可以传入该类型或者其子类类型
-
泛型使用形式
Listlist1 =new ArrayList (); List
list2 = new ArrayList (0); 开发过程中进行简写,因为编译器会进行类型推断
List
list1 =new ArrayList<>(); List
list2 = new ArrayList<>(); 如果这样写 List list3 = new ArrayList();默认给它的泛型是[
E就是Object ]
自定义泛型
自定义泛型类
语法
class 类名 <T, R...> { //...表示可以有多个泛型
成员
}
注意事项:
1)普通成员可以使用泛型(属性、方法)
2)使用泛型的数组,不能初始化
3)静态方法中不能使用类的泛型
4)泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)
5)如果在创建对象时,没有指定类型,默认为Object
自定义泛型接口
基本语法
interface 接口名<T,R…>{
}
注意事项:
1)接口中,静态成员也不能使用泛型(这个和泛型类规定一样)
2)泛型接口的类型,在继承接口或者实现接口时确定
3)没有指定类型,默认为Object
自定义泛型方法
基本语法
修饰符<T,R...>返回类型 方法名(参数列表){
}
注意事项:
1.泛型方法,可以定义在普通类中,也可以定义在泛型类中
2.当泛型方法被调用时,类型会确定
3.public void eat(E e){}, 修饰符后没有<T,R..> 则这个eat方法不是泛型方法,而是使用了泛型
4.泛型方法,可以使用类声明的泛型,也可以使用自己声明泛型
泛型的继承和通配符
1)泛型不具备继承性
List