本质是将类型参数化.
在没有引入泛型前,比如集合类,放入的类型是"任意化"的,而这种"任意化"带来的最直接的问题就是需要进行类型的强制转换,这种强制转换的前提是开发者知道实际参数类型. 如果类型转换错误,编译器不会提示,当运行时才会报错,这是一个隐患.JDK5中引入泛型,不仅解决类型强制转换的问题,同时由于对类型进行了参数化限制,对于错误的类型,在编译器就可以发现.
需要了解:
1.泛型使用方式
分别为:泛型类、泛型接口、泛型方法
public <T> T showKeyName(Generic<T> container){
System.out.println("container key :" + container.getKey());
T test = container.getKey();
return test;
}
2.关于泛型擦除
引入泛型的目的是为了方便对代码进行编译期检查,这种类型约束只在编译阶段有效,编译后就被擦除.
为什么擦除?
- 兼容,JDK5才引入,保证生成的Class文件和之前版本的JDK一致
- 不用生成多余的Class对象.比如list 和list
泛型擦除导致运行期间无法获取实际的参数类型?
通过内部类解决
3.泛型上下边界
//todo