目录
什么是泛型?
为什么使用泛型?
泛型对数据类型有影响吗?
泛型通配符
思考问题
什么是泛型?
Java中泛型就是将数据类型指定为参数,可作用于类、接口及方法的创建中。
为什么使用泛型?
1.保证类型安全,在编译阶段实现类型检查
import java.util.ArrayList;
import java.util.List;
public class Demo01 {
public static void main(String[] args) {
//未指定泛型类型的的list
List list = new ArrayList<>();
//指定泛型类型为String的list
List strList = new ArrayList<>();
//未指定泛型类型的list可以添加任意类型的数据
list.add("hello world");
list.add(100);
//指定泛型类型为String的list只可以添加String类型的数据,当添加int类型时编译报错
strList.add("hello world");
strList.add(100);//此处出现编译错误
}
}
2.避免类型转换硬编码
import java.util.ArrayList;
import java.util.List;
public class Demo02 {
public static void main(String[] args) {
//未指定泛型类型的list
List list = new ArrayList();
//指定泛型类型为String的list
List strList = new ArrayList<>();
list.add("not genuse demo");
list.add("test data");
strList.add("genuse demo");
strList.add("test data");
String firstItem1 = (String)list.get(0);
String firstItem2 = strList.get(0);
}
}
3.提高代码的重用性
在日常开发中为了使有些类、接口及方法的适用范围更广,通常都会使用泛型来达到此目的。比如计算机的加方法,如果一开始只定义为整数类型相加,那么后续要衍生出其它数据类型(double、float、long等)的加法则需要不断添加方法,这是不可取的。此时泛型即可帮我们达到代码可重用性的目的。
public class CalDemo implements Cal{ public Integer add(Integer num1, Integer num2){ return num1 + num2; } }
public interface Cal{ T add(T num1, T num2); }
泛型对数据类型有影响吗?
不会。
原因是泛型只对编译器起作用,在编译期间java编译器会进行类型擦除。可通过查看编译文件验证此论证。命令如下:
javap -verbose
泛型通配符
用于定义泛型界限的符号,主要有以下三种类型:
- 无通配符:>
- 上界通配符: extends E>
- 下界通配符: super E>
import java.util.List;
public class Demo03 {
public void unbound(List> list){
}
public void upLimit(List extends Number> list){
}
public void downLimit(List super Number> list){
}
}
思考问题
什么是泛型桥接?
什么是堆污染?
以上内容仅代表个人理解,如有不足欢迎指正,请多多包涵,谢谢!



