java中泛型的基本使用
参考文档:
[1] https://www.cnblogs.com/coprince/p/8603492.html
[2] https://www.liaoxuefeng.com/wiki/1252599548343744/1265103567584000
- 泛型是为了在有类型要求时,提示我们使用正确的类型。
- 泛型只在编译阶段有效,不会进入到运行时阶段。
- 在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。
一、不使用泛型
不使用泛型时, List arrayList = new ArrayList(); arrayList中可以放入任意类型变量,编译、运行时都不会报错。
List arrayList = new ArrayList(); arrayList.add("hello"); arrayList.add("world"); arrayList.add(66);
for (int i = 0; i < arrayList.size(); i++) { System.out.println(arrayList.get(i)); }
运行结果:
但是如果涉及到类型转换,编译时不报错,运行后会崩溃:
System.out.println((String) arrayList.get(i));
二、使用泛型
参数类型和泛型类型不匹配时,编译器会直接提示错误。
List<String> arrayList = new ArrayList<String>();
由图可知 new ArrayList<String>() 中的 String,是灰色的,因为现在可以用 <> 代替 <String>
List<String> arrayList = new ArrayList<>();
泛型类:定义类的时候使用泛型,内部属性也使用泛型。
import lombok.Data; import java.util.List; @Data public class Person<T> { private String name; private int age; private List<T> subject; }
在 TestApplication.java 中 new Person<>();
Person<String> person = new Person<>(); person.setName("Alice"); person.setAge(32); List<String> arrayList = new ArrayList(); arrayList.add("CS"); arrayList.add("Math"); arrayList.add("English"); person.setSubject(arrayList); System.out.println(person);
运行结果:
如果改成 Person<Integer> person = new Person<>();