什么是泛型
- Java泛型(generics)是JDK5中引入的新特性,泛型提供了编译时类型安全检测机制,该机制允许我们在编译时检测到非法的类型数据结构。
- 泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数
- 通俗来讲:就是为了约束数据结构的类型
ArrayList<String> list = new ArrayList<>();
泛型类、接口
//自定义泛型类
package com.bixiangdong.generic;
// 这里的T就是一个形式参数,在使用类的时候指定的 类似于:ArrayList<String> list = new ArrayList<>();
//泛型类的使用:类名<具体的数据类型> 对象名 = new 类名<具体的数据类型>();
//JDK 1.7 后面的具具体的数据类型可以不写 泛型类的使用:类名<具体的数据类型> 对象名 = new 类名<>();
public class Generic<T> {
private T key;
public Generic(T key){
this.key=key;
}
public T getKey(){
return this.key;
}
public void setKey(T key) {
this.key = key;
}
@Override
public String toString() {
return "Generic{" +
"key=" + key +
'}';
}
}
- 泛型类在使用的时候如果没有指定具体的类型,将默认指定为Object类型来操作
- 泛型类不支持具体的数据类型:int、float等,支持类,Integer等
package com.bixiangdong.generic;
import java.util.ArrayList;
import java.util.Random;
public class Demo01 {
public static void main(String[] args) {
//抽奖品
ProductGetter<String> objectProductGetter = new ProductGetter<>();
objectProductGetter.addProduct("哇哈哈");
objectProductGetter.addProduct("勇闯天涯");
objectProductGetter.addProduct("百事可乐");
objectProductGetter.addProduct("可口可乐");
objectProductGetter.addProduct("雪碧");
System.out.println(objectProductGetter.getProduct());
//抽奖金
ProductGetter<Integer> objectProductGetter2 = new ProductGetter<>();
objectProductGetter2.addProduct(1230);
objectProductGetter2.addProduct(4564);
objectProductGetter2.addProduct(156561);
objectProductGetter2.addProduct(4546);
objectProductGetter2.addProduct(48452);
System.out.println(objectProductGetter2.getProduct());
}
}
class ProductGetter<T>{
Random random = new Random();
//奖品
private T product;
//奖品池
ArrayList<T> list = new ArrayList<>();
//添加奖品
public void addProduct(T t){
list.add(t);
}
//获取奖品
public T getProduct(){
return list.get(random.nextInt(list.size()));
}
}
泛型类派生子类
- 子类继承父类,父类如果是一个泛型类,子类也是一个泛型类,那么父类的泛型标识需要于子类一致,这是为了在使用子类的时候,指定的泛型可以传递给父类

泛型方法
泛型方法
类型通配符
类型擦除
泛型和数组
泛型和反射