泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。
可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。
泛型接口:
public interface Collection<E> extends Iterable<E>{..}
泛型类:
public class Generic<T> {
private T key; //key这个成员变量的类型为T,T的类型由外部指定
}
泛型方法:
public void play( List<String> animal){...}
public void test(List<?> list){...}
public void play( List<? extends Animal> animal){...}
public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
this.key = key;}
注意事项:
1.<> 尖括号里边 的参数类型是引用数据类型,不能是基本数据类型
2.类型参数用尖括号加任意字母表示 : <T>,字母一般为单个大写字母,并有一定含义,
例如 T(type),E(element),K(key),V(value) 等等
3.泛型通配符 ?
----------------------------------------------------------泛型实践--------------------------------------------------------
Student:
package factory.Student;
public class Student {
public Student(){
}
//**********字段*************//
public String name;
protected int age;
char sex;
private String phoneNum;
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", sex=" + sex
+ ", phoneNum=" + phoneNum + "]";
}
}test_0809:public class test_0809 {
public String name = "123";
}泛型:
package doudou.fanxing;
import java.util.ArrayList;
import java.util.List;
import doudou.test_0809;
import factory.Student.Student;
public class test_fanxing01 {
private static final Object String = null;
public static void main(String[] args) {
test_fanxing01();
}
public static void test_fanxing01() {
List<? super Object> list = new ArrayList<>();
list.add(new String("123456789"));
list.add(new Integer(111));
list.add(new Student());
list.add(new test_0809());
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}代码运行结果:

















