您的位置:首页 > 编程语言 > Java开发

java泛型

2016-06-09 00:48 429 查看
泛型 — 通用类型

由来 : java语言 开发者 一批C++ 工程师 ,在c++ 语法中 模板技术 —– java泛型由来

应用 : 1、类型安全检查 2、编写通用java程序(java框架)

JDK5 之前集合对象使用问题: 1、向集合添加任何类型对象 2、从集合取出对象时,数据类型丢失,使用与类型相关方法,强制类型转换

* 程序存在安全隐患

泛型语法: List<泛型类型> 规定 List集合中元素类型 ,取出集合中元素时,获得具体数据类型元素(不需要进行类型强制转换 )

* 泛型技术 只是 编译器阶段技术,为javac命令 起到类型安全检查作用 ,生成.class文件后,泛型信息将会被 擦除

List —- 参数化类型

泛型技术 对象 List 、Set 、Map中元素 进行类型安全约束

* 掌握 遍历 使用 类型安全 List 、Set 、Map

使用泛型的对象进行类型转换时,等号两端对象使用泛型类型 必须一致!

使用泛型编写一些通用java程序 : 结合反射技术一起使用 —– 自定义泛型

1、定义泛型方法,必须在方法的返回值之前进行 泛型类型声明 <泛型类型>

* 编写一个通过数组交换元素方法

* 编写一个通过数组倒序方法

@Test
public void demo4(){
Integer[] arr=new Integer[]{1,2,3,4};
change(arr,1,2);
System.out.println(Arrays.toString(arr));

}
public <T>void change(T[] arr,int i1,int i2){//利用泛型写的通用实例
T tenm=arr[i1];
arr[i1]=arr[i2];
arr[i2]=tenm;
}


2、在类名后声明类的泛型,当类的泛型使用后,该类中所有方法都可以直接使用泛型 —— 在类名后 <泛型类型> —- 不对static方法生效

* 对应泛型类型参数起名 T E K V —- 泛型类型可以以任意大写字母命名,建议你使用有意义的字母

T Template E Element K key V value

泛型通配符 —- > ?

泛型 : 任意类型

?:任意泛型类型

通过上下边界,限制通配符类型范围:

? extends Number —-> Number任意子类型 (包含Number)

? super String —- > String任意父类型 (包含String)

* 上下边界不能同时使用

? extends Object super Integer —– 没有这么写的

上下边界应用:

范例一

Set 中 addAll(Collection < ? extends E> c) —– 将目标集合c的内容添加到当前set ,? extends E 目标集合是E的子类型

Set set = new HashSet();

List list = new ArrayList();

set.addAll(list); // list 中 Integer 自动转换为 Number

范例二

TreeSet(Comparator< ? super E> comparator)

Set set = new TreeSet(); // 默认需要苹果比较器排序

class FruitComparator implements Comparator {}

Set set = new TreeSet(new FruitComparator()); // 需要Apple比较器 ,传入 Fruit比较器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 泛型