一、了解泛型
1.泛型概述
2.为什么要使用泛型
当我们没有指定集合元素数据类型时,他默认给的是Object类型,因为泛型默认是引用类型,而Object可以代表所有的引用类型
但是我们存入的是String类型,所以可以向下转型:
存入一个Integer型再输出就会报错,因为存入时候是Object类型,Object可以代表所有的引用类型,所以可以存入,但是遍历时候Integer不能强转为String,就会报错。
当然其实这样也不会报错
如果不使用泛型,会隐含类型转换异常
我们一般集合都存储单一类型元素
使用泛型可以把我们隐含的异常提前在编译时就产生并处理(将运行时异常提前到编译期)
并且使用泛型之后也不需要再加强制类型转换
二、泛型类
1.为什么使用泛型类
Teacher类中setAge是Integer型所以不能传人字符串型,如果想传人字符串型需要用泛型类
在这里T相当于一个参数
创建对象,传入什么类型T就是什么类型
三、泛型方法
没有提供对应方法就会报错
给一种数据类型方法调用就得有对应的类型方法
改进:
用泛型类:
但是每次创建对象需要写数据类型
可以在创建对象时候不明确类型,在调用方法时再明确数据类型
用泛型方法改进:
四、泛型接口
接口:
package generics;
public interface Generic<T>{
void show(T t);
}
实现类:
package generics;
public class GenericImpl <T> implements Generic<T>{
public void show(T t) {
System.out.println(t);
}
}
测试:
package generics;
public class GenericMethod {
public static void main(String[] args) {
Generic<String> s1=new GenericImpl<String>();
s1.show("shi");
}
}
五、类型通配符
代码演示: