之前在学习方法的时候,我们知道了形参和实参的概念。那么为什么方法有形参呢?是因为方法体的功能实现中,需要外界(使用者)给它提供数据,这个数据在编写方法体的时候,数据值是不确定的(形参),需要在调用方法的时候才能确定(实参),例如:编写一个方法,可以求两个整数的和。
public class Demo {
// 求两个整数的和,其中 a 和 b 是形参
public static void add(int a,int b){
return a + b;
}
public static void main(String[] args){
int result = add(1,2); // 1 和 2 是实参
System.out.println("result = " + result);
}
}
受到上面的启发,JDK 1.5 就设计了泛型的概念。当我们在设计某个类的时候,出现了某个成员的类型不确定,需要在使用这个类的时候才能确定,就可以将这个类型作为参数传递。其实可以声明在类、接口或方法中,代表未知的通用的类型(可以对比方法中的形参来理解)。
package java.util;
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{ // E 就是代表未知的类型,又称为类型形参
public boolean add(E e) { // 添加一个元素到集合中
modCount++;
add(e, elementData, size);
return true;
}
// 其余略
}
package com.github.day10.generic;
import java.util.ArrayList;
import java.util.List;
/**
* @author maxiaoke.com
* @version 1.0
*/
public class TestGeneric {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // 此时 <E> 就是 <String>
list.add("1");
list.add("2");
list.add("3");
list.add("4");
System.out.println("list = " + list);
}
}