1. 程式人生 > 其它 >Java基礎第二遍-泛型

Java基礎第二遍-泛型

什麼是泛型

  1. Java泛型(generics)是JDK5中引入的新特性,泛型提供了編譯時型別安全檢測機制,該機制允許我們在編譯時檢測到非法的型別資料結構。
  2. 泛型的本質就是引數化型別,也就是所操作的資料型別被指定為一個引數
  3. 通俗來講:就是為了約束資料結構的型別
    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 +
                '}';
    }
}

  1. 泛型類在使用的時候如果沒有指定具體的型別,將預設指定為Object型別來操作
  2. 泛型類不支援具體的資料型別: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()));
    }
}

泛型類派生子類

  1. 子類繼承父類,父類如果是一個泛型類,子類也是一個泛型類,那麼父類的泛型標識需要於子類一致,這是為了在使用子類的時候,指定的泛型可以傳遞給父類

泛型方法

泛型方法

型別萬用字元

型別擦除

泛型和陣列

泛型和反射