泛型
希望编译时,及时发现类型不匹配的问题
- 必须明确知道参数类型中的引用数据类的具体类型Object(类型)
- 向下转型,需要通过instanceof 判断
结论:向下转型是不安全的,会带来隐患
Eg:
泛型类:
- x,y
2.整数,浮点型,字符串
3.泛型类,,指定参数类型
4.使用泛型类的时候,决定属性的具体类型
*/
类型参数
public class Test1<T> {
private T x;
private T y;
泛型类和泛型方法(没有关系)
- 泛型类和泛型方法参数类型的字母最好区分开
- 泛型类和泛型方法可以共存,二者各自独立
泛型方法:(比方法重载要厉害)
参数化类型
- public <T> void print(T t)
System.out.println (t);
- 泛型通配符
- ?表示可以是任意类型,但是要求,不能对类的对象进行修改
- <?extends 泛型类型>泛型类型的上限(用的多)
上限用在声明,但是要求,不能对类的对象进行修改
(String类没有子类,因为它被final修饰)
- <? super 泛型类型>泛型类型的下限
用在方法参数上,可以修改
泛型接口
1.泛型接口的定义和泛型类区别不大
2.泛型接口的实现类:有可能是泛型类,也有可能不是泛型类(接口处指定具体类型)
泛型类型擦除
1.泛型类和普通类在jvm中没有什么不同
Unicode 汉字编码范围\u4E00-\u9FA5
- 编译时的功能扩展,运行时擦除泛型信息
- 如果泛型类型无上限类型,泛型擦除之后的类型是Object
如果泛型类型有上限类型,泛型擦除之后的类型是上限类型
Test1<Integer> test1 = new Test1();
Test1<String> test2=new Test1();
System.out.println (test1.getClass ()==test2.getClass ());
System.out.println ("test1 Class:"+test1.getClass ());
System.out.println ("test2 Class:"+test2.getClass ());
输出结果:
true
true