1. 程式人生 > >java學習----泛型

java學習----泛型

格式 符號 需要 泛型的定義 區別 private 特性 interface demo

目錄

  1.泛型的定義

  2.泛型的使用

  3.泛型通配符

一、泛型的定義

  泛型是java5的新特性,使用泛型會讓程序編寫簡單安全,在編譯的時候就會檢查類型是否安全

  定義:所謂泛型就是允許在定義類、接口和方法使用參數類型這個類型形參可以在聲明變量、

創建對象、調用方法時動態指定(類型實參)泛型的參數類型只能是引用類型,不能是基本類型

  

二、泛型的使用

  1.泛型接口

    泛型接口格式:

      修飾符 interface 接口名<T...>{}

      泛型接口Demo:

public interface Action<E> {
    
//在接口中使用泛型E E getE(); //在接口中使用泛型抽象方法 <T> T getT(int i); }

  2.泛型類

    泛型類格式:

      修飾符 class 類名<T...>{

      使用T; }    

        泛型類Demo:

//類上聲明泛型E
public class ActionImpl<E>{
    //聲明E類型變量
    private E e;
    //使用E類型
    public E getE() {
        // TODO Auto-generated method stub
return e; } public ActionImpl(E e){ this.e = e ; } }

  3.泛型方法

    泛型方法格式:

      修飾符<T...> 返回值 方法名 (參數列表){

        使用T; }

        泛型方法Demo:

public class GenericWay {
    //方法上聲明泛型T類型
    public static <T> T get(T t){
        return t;
    }
}

三、泛型通配符

  泛型通配符的符號是?

  普通的泛型與泛型通配符的泛型Class<T>與Class<?>的區別在於:

  Class<T> :在實例化的時候,T需要替換成具體的類型
  在泛型類、方法中可以使用T,還可以操作T類型的變量

  Class<?>:他是通配符,?可以表示任何類型(使用了泛型)

  泛型通配符可以匹配任意類型。

  泛型通配符Demo:

  

import java.util.ArrayList;
import java.util.List;

public class GWC {
    //參數是list,list裏的類型可以是任意類型
    public void forList(List<?> l){
        for (Object object : l) {
            System.out.println(object);
        }
    } 
    public static void main(String[] args) {
        GWC gwc = new GWC();
        List<Integer> l1 = new ArrayList<>();
        l1.add(1);
        l1.add(2);
        gwc.forList(l1);
        List<String> l2 = new ArrayList<>();
        l2.add("1");
        l2.add("2");
        gwc.forList(l2);
    }
}

    通配符上限

     舉個栗子:

        List<? extends Number> 這麽聲明的數只能是number類型或number類型的子類

      通配符上限Demo:

        

import java.util.ArrayList;
import java.util.List;

public class GWCTop {
    public void forList(List<? extends Number> l){
        for (Number number : l) {
            System.out.println(number);
        }
    }
    
    public static void main(String[] args) {
        GWCTop gwcTop = new GWCTop();
        //Object 類型是number類型的父類編譯報錯;
        //List<Object> list = new ArrayList<>();
        //String 類型不是number編譯器報錯;
        //List<String> list = new ArrayList<>();
        List<Number> list = new ArrayList<>();
        gwcTop.forList(list);
    }
}

    通配符下限

      舉個栗子:

        List<? super Number> 這麽聲明的數只能是number類型或number類型的父類

        通配符下限Demo:

import java.util.ArrayList;
import java.util.List;

public class GWCUnder {
    public void forList(List<? super Number> l){
        for (Object object : l) {
            System.out.println(object);
        }
    }
    public static void main(String[] args) {
        GWCUnder gwcUnder = new GWCUnder();
        //Integer 類型是Number類型的父類,編譯不通過;
        //List<Integer> list = new ArrayList<>();
        //String 類型不是Number類型的父類,編譯不通過;
        //List<String> list = new ArrayList<>();
        List<Object> list = new ArrayList<>();
        gwcUnder.forList(list);
    }
}

java學習----泛型