泛型可以提高程序安全性
让编译器挡住非法信息
例如:容器可以根据泛型阻止其他类的进入
同时返回Object对象的方法会根据泛型确定返回类型 不在需要强制转换
泛型只对编译器起作用,在编译结束后泛型的类型就被去掉--->去类型化
使用反射可以跳过编译器
ArrayList<E> 泛型
E 类型参数
ArrayList<Integer> 参数化的泛型
<> 读音 typeof
ArrayList原始类型
泛型可以兼容旧的方法与数据类型
泛型不考虑继承关系
泛型通配符 ?
collection<?> 方法的使用时会参考泛型,使用通配符时,参考泛型的方法将不可用
? extends 类型 继承了该类型的子类的通配符
? super 类型 该类型的父类通配符
jsp迭代
<c:forEach item="${map}" var="entry">
${entry.key}:${entry.value}
</c>
测试结果: 为什么我的自己排序了??????
方法使用泛型
public <T extends 类型&类型> void 方法()
定义时放在 返回值之前
泛型<T>可以根据返回值 和参数指定,
泛型确定的有传染性
或者取最小的共同父类
DAO -->Data access object
类泛型定义在类名后
静态方法不能使用泛型
*****************************
s:25
q:23
l:22
z:20
*****************************
import java.util.HashMap.*;
import java.util.*;
public class HashMapTest {
public static void main(String[] args){
HashMap<String, Integer> hashMap = new HashMap<String, Integer>();
hashMap.put("z", 20);
hashMap.put("q", 23);
hashMap.put("s", 25);
hashMap.put("l", 22);
Set<Map.Entry<String, Integer>> entrySet = hashMap.entrySet();
for(Map.Entry<String, Integer> entry : entrySet){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}