Java 理解泛型的基本含義

來源:互聯網
上載者:User

標籤:system   編譯器   void   ber   理解   數組   標識符   傳回值   lis   

Java 泛型

Java 泛型(generics)是 JDK 5 中引入的一個新特性, 泛型提供了編譯時間型別安全檢測機制,該機制允許程式員在編譯時間檢測到非法的類型。

泛型的本質是參數化型別,也就是說所操作的資料類型被指定為一個參數。

 

泛型方法

你可以寫一個泛型方法,該方法在調用時可以接收不同類型的參數。根據傳遞給泛型方法的參數類型,編譯器適當地處理每一個方法調用。

下面是定義泛型方法的規則:

  • 所有泛型方法聲明都有一個型別參數聲明部分(由角括弧分隔),該型別參數聲明部分在方法傳回型別之前(在下面例子中的<E>)。
  • 每一個型別參數聲明部分包含一個或多個型別參數,參數間用逗號隔開。一個泛型參數,也被稱為一個類型變數,是用於指定一個泛型型別名稱的標識符。
  • 型別參數能被用來聲明傳回值類型,並且能作為泛型方法得到的實際參數類型的預留位置。
  • 泛型方法體的聲明和其他方法一樣。注意型別參數只能代表引用型類型,不能是原始類型(像int,double,char的等)。
執行個體:
public class ElementDemo {        public static void main(String[] args) {                //<Integer>運行時類型        //使用泛型後,如果執行個體化是定義的類型與對象傳入的類型不一致,就會在編譯時間期報錯。        Test<Integer> t1 = new Test<>();        t1.add(666);                 Test<String> t2 = new Test<>();        t2.add("cjj");    }}/** * "E" 在這裡並沒有實際意義,你也可以用別的字母代替 * 它的作用就是在執行個體化Test類的時候,傳入什麼類型它就調用什麼類型 */class Test<E>{    public void add(E e) {                System.out.println(e);    }}
注意:

泛型的命名只要符合標識符的命名規則即可
習慣上泛型一般只使用一個大寫字母進行命名

    <T> type
    <E> element 元素類型
    <K> key
    <V> value
    <R> result/return

泛型向下相容

<? extends 類/介面>

import java.util.ArrayList;import java.util.List;public class ElementDemo {    public static void main(String[] args) {                //執行個體化一個Integer類型的數組列表對象,裡面儲存的資料都是int型資料        List<Integer> in = new ArrayList<>();        in.add(1);        in.add(2);        in.add(3);        in.add(4);        in.add(5);        in.add(6);        //執行個體化一個Double類型的數組列表對象,裡面儲存的資料都是Double類型的        List<Double> dos = new ArrayList<>();        dos.add(3.6);        dos.add(4.2);        dos.add(6.8);        dos.add(7.7);        dos.add(0.2);                //調用方法        print(in);        print(dos);    }        // 寫一個新的方法來遍曆元素類型是數位列表    // 元素類型是Number或者是其子類    // ? extends 類/介面 表示傳入這個類/介面或者是其子類/子介面對象    // 所能傳入的元素的最大類型限定為Number    // 規定了泛型的上限    public static void print(List<? extends Number> list) {                //在方法體裡面不能再往對象裡添加元素,null除外        list.add(null);                //列印對象裡面的元素        System.out.println(list);    }}

向上造型規定了泛型的上限,上限的子類都可以向泛型方法傳入對象。

泛型向下相容

<? extends 類/介面>

import java.util.ArrayList;import java.util.List;public class ElementDemo1 {    public static void main(String[] args) {                List<String> str = new ArrayList<>();        str.add(0, "cjj");                print(str);    }        // 泛型的下限    // 傳入元素類型是String及其父類的列表    // ? super 類/介面 表示傳入這個類/介面及其父類/父介面的對象    // 表示傳入的最小類型是String        public static void print(List<? super String> list) {                //方法體裡面可以添加元素        list.add("add");                for(Object o : list){            System.out.println(o);        }    }}

向上造型規定了泛型的下限,下限的fu類都可以向泛型方法傳入對象。

 

Java 理解泛型的基本含義

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.