泛型
什么是泛型?
泛型就是定义一种模板
例如ArrayList<T>
然后在代码中为用到的类型创建对应的ArrayList<类型>
ArrayList<T> strlist = new ArrayList<String>()
优点:
- 编写一次 万能匹配
- 不必对类型进行强制转换
- 编辑器保证了类型安全
使用泛型
如果不定义泛型类型时,泛型类型实际上就是Object
Object类是所有类的父类,也就是说任何一个类的定义的时候如果没有明确的继承一个父类的话,那么它就是Object的子类。
//编译器警告
//分清List 与 ArrayList 的区别
List list = new ArrayList();
list.add("hello");
//强制转换
String first = (String) list.get(0);
System.out.println(first);
定义泛型<String>
后,List<T>
的泛型接口变为强类型List<String>
//编译器无警告
List<String> listStr = new ArrayList<>();
listStr.add("nj-jay");
String first = listStr.get(0);
System.out.println(first);
定义泛型<Number>
所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。
List<Number> listNum = new ArrayList<>();
listNum.add(1);
listNum.add(12.34);
Number firstNum = listNum.get(0);
System.out.println((int) firstNum + 1);
Number secondNum = listNum.get(1);
System.out.println((double) secondNum + 3.14);
自定义泛型
//student.java
public class student {
private String name;
private int age;
public student() {
}
public student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//Main
public class Main {
public static void main(String[] args) {
student stu1 = new student("nj", 20);
student stu2 = new student("jay", 21);
student stu3 = new student("nj-jay", 22);
ArrayList<student> list = new ArrayList<>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
for (int i = 0; i < list.size(); i++) {
student stu = list.get(i);
System.out.println(stu.getName() + stu.getAge());
}
}