泛型概述
在Java中存入容器中的对象再取出时需要转换类型,因为对象加入容器会被转换成Object类型,而取出时要转换成实际类型。但向 下类型转换都 是存在潜在危险的,因此应该尽量避免它们。
Java的泛型:
所谓泛型就是在定义(类、方法、形参、成员变量等等)的时候,指 定它们为通用类型,也就是数据类型可以是任意类型。
泛型为提高大型程序的类型安全和维护带来了很大的潜力。
使用泛型的目的:
努力将运行时异常转换成编译时的错误,减少运行时异常的数量。
解决模板编程的问题。
1. 泛型的声明:
在定义泛型类的时候,在<>中定义形式类型参数,例如:
Class TestJava
、Class TestList
、Class TestVector
,
其中
K:键,比如映射的键。
V:值,比如Set、List、Map中的值。
E:异常类。
T : 泛型。
在实例化泛型对象的时候,一定要在类名后面指定类型参数的值,如:
List
list = new ArrayList
():
2. 泛型的使用:
1>消除类型的转换:
下面是消除类型转换的例子:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class CollectionsTest {
public static void main(String[] args) {
// 声明ArrayList对象 ,且list中只能存储String类元素
List
list = new ArrayList
(); // 向数组列表中添加元素 list.add("1abc"); list.add("2def"); list.add("3hij"); list.add("4klm"); // 取得list元素并输出,无须类型转换 System.out.print("输出第四个元素:"); String str = list.get(3); System.out.println(str); System.out.println("\n输出列表中的所有元素:"); for (String s : list) { System.out.println(s); } System.out.println(); // 声明一个HashMap对象,指定键的类型为Integer、值的类型为String Map
map = new HashMap
(); // 向对象中添加元素 map.put(1, "zhao"); map.put(2, "qian"); map.put(3, "sun"); map.put(4, "li"); // 取得键集 Set
keys = map.keySet(); // 由键取得对应的值,并输出 System.out.println("输出: key=value"); for (Integer i : keys) { String value = map.get(i); System.out.println(i + "=" + value); } } }
输出结果:
输出第四个元素:4klm
输出列表中的所有元素:
1abc
2def
3hij
4klm
输出: key=value
1=zhao
2=qian
3=sun
4=li
注:
属性中使用集合时不指定泛型,默认为