不使用泛型,我们写入集合的元素需要是Object类型,虽然什么类型的元素都可以存入集合,但取出元素使用时我们需要强制转换为元素原来的类型,这就需要我们明确知道每个元素的数据类型,否则很容易引发ClassCastException异常。

  使用泛型,先指定数据类型,后期取用不需要再转换。

泛型类的定义语法:

class 类名称<泛型标识,泛型标识,…>{

         private 泛型标识 变量名;

         ……

  }

  常用的泛型标识:T、E、K、V

  泛型类使用语法:

  类名<具体的数据类型> 对象名=new 类名<具体的数据类型>();

  Java1.7以后,后面的<>中的具体的数据类型可以省略不写

  类名<具体的数据类型> 对象名=new 类名<>();

  泛型类在创建对象的时候,没有指定类型,将按照Object类型来操作。

  泛型类不支持基本数据类型,只能是类类型。(指定整型时,不能用int,要用Integer)

  同一泛型类,根据不同的数据类型创建的对象,本质上是同一类型。(泛型类 类类型)

  从泛型类派生子类:

  子类也是泛型类,子类和父类的泛型类型要一致

class ChildGeneric<T> extends Generic<T>

  子类不是泛型类,父类要明确泛型的数据类型

classs ChildGeneric extends Generic<String>

  泛型类举例:使用泛型类,编写简单的抽奖器。

1 package FanXing;  //泛型类编写
 2 
 3 import java.util.ArrayList;
 4 import java.util.Random;
 5 
 6 //创建泛型类ProductGetter(抽奖器)
 7 public class ProductGetter<T> {
 8     Random random=new Random();
 9     //奖品
10     private T product;
11     
12     //奖品池
13     ArrayList<T> list=new ArrayList<>();
14     
15     //添加奖品
16     public void addProduct(T t) {
17         list.add(t);
18     }
19     
20     //抽奖
21     public T getProduct() {
22         product=list.get(random.nextInt(list.size()));
23         return product;
24     }
25 }
1 package FanXing;  //测试类
 2 
 3 public class MainClass {
 4 
 5     public static void main(String[] args) {
 6         //创建抽奖器对象,指定数据类型(String)
 7         ProductGetter<String> stringProductGetter=new ProductGetter<>();
 8         String strProduct[]= {"苹果手机","华为手机","咖啡机","扫地机器人"};
 9         //给抽奖器中填充奖品
10         for(int i=0;i<strProduct.length;i++) {
11             stringProductGetter.addProduct(strProduct[i]);
12         }
13         //抽奖品
14         String product1=stringProductGetter.getProduct();
15         System.out.println("恭喜您,您抽中了:"+product1);
16         
17         System.out.println("---------------------------");
18         
19         //创建抽奖器对象,指定数据类型(Integer)
20         ProductGetter<Integer> IntProductGetter=new ProductGetter<>();
21         int intProduct[]= {10000,8000,6000,3000,1000,5000};
22         //给抽奖器中填充奖金
23         for(int i=0;i<intProduct.length;i++) {
24             IntProductGetter.addProduct(intProduct[i]);
25         }
26         //抽奖金
27         int product2=IntProductGetter.getProduct();
28         System.out.println("恭喜您,您抽中了:"+product2);
29     }
30 
31 }

运行结果如下:

android 泛型函数类型 泛型.class_android 泛型函数类型