JAVA-基礎-泛型

來源:互聯網
上載者:User

標籤:報錯   就會   font   scanner   IV   ring   code   泛型   abstract   

使用集合時,必須明確集合中元素的類型。這種方式稱為:泛型。

 定義格式:修飾符 class 類名<代表泛型的變數> { }

建立對象時 確定泛型的類型

例如,ArrayList<String> list = new ArrayList<String>();

此時,變數E的值就是String類型

class ArrayList<String>{public boolean add(String e){ }    public String get(int index){ }}

例如,ArrayList<Integer> list = new ArrayList<Integer>();

此時,變數E的值就是Integer類型

class ArrayList<Integer>{public boolean add(Integer e){ }    public Integer get(int index){ }}
  含有泛型的方法

定義格式:修飾符 <代表泛型的變數> 傳回值類型 方法名(參數){ }

 

例如,API中的ArrayList集合中的方法:

public <T> T[] toArray(T[] a){ }

//該方法,用來把集合元素儲存到指定資料類型的數組中,返回已儲存集合元素的數組

使用格式:調用方法時,確定泛型的類型

例如

ArrayList<String> list = new ArrayList<String>();

String[] arr = new String[100];

String[] result = list.toArray(arr);

此時,變數T的值就是String類型。變數T,可以與定義集合的泛型不同

public <String> String[] toArray(String[] a){

 

例如

ArrayList<String> list = new ArrayList<String>();

Integer[] arr = new Integer[100];

Integer [] result = list.toArray(arr);

此時,變數T的值就是Integer類型。變數T,可以與定義集合的泛型不同

public <Integer> Integer[] toArray(Integer[] a){ }

  含有泛型的介面

  定義格式:修飾符 interface介面名<代表泛型的變數> { }

例如,API中的Iterator迭代器介面

public interface Iterator<E> {

    public abstract E next();

}

    

使用格式:

定義類時確定泛型的類型

例如

public final class Scanner implements Iterator<String> {

public String next(){ }

}

此時,變數E的值就是String類型。

 

始終不確定泛型的類型,直到建立對象時,確定泛型的類型

例如

ArrayList<String> list = new ArrayList<String>();

Iterator<String> it = list.iterator();

此時,變數E的值就是String類型。

public interface Iterator<String> {

    public abstract String next();

}

   使用泛型的好處

將運行時期的ClassCastException,轉移到了編譯時間期變成了編譯失敗。

避免了類型強轉的麻煩。

public class GenericDemo {    public static void main(String[] args) {        List<String> list = new ArrayList<String>();        list.add("abc");        list.add("itcast");        //list.add(5);//當集合明確類型後,存放類型不一致就會編譯報錯        //集合已經明確具體存放的元素類型,那麼在使用迭代器的時候,迭代器也同樣會知道具體遍曆元素類型        Iterator<String> it = list.iterator();        while(it.hasNext()){    String str = it.next();//當使用Iterator<String>控制元素類型後,就不需要強轉了。擷取到的元素直接就是String類型            System.out.println(str.length());        }    }}
  泛型萬用字元

泛型是在限定資料類型,當在集合或者其他地方使用到泛型後,那麼這時一旦明確泛型的資料類型,那麼在使用的時候只能給其傳遞和資料類型匹配的類型,否則就會報錯。

當使用泛型類或者介面時,傳遞的資料中,泛型型別不確定,可以通過萬用字元<?>表示。但是一旦使用泛型的萬用字元後,

只能使用Object類中的共性方法,集合中元素自身方法無法使用。

 泛型限定

限定泛型的上限:

格式:? extends E

? 代表接收E類型或者E的子類型的元素

例如,泛型限定為:? extends Person

則 ? 代表接收Person類型或者Person子類型的元素

限定泛型的下限:

格式:? super E

? 代表接收E類型或者E的父類型的元素

例如,泛型限定為:? super Student

則 ? 代表接收Student類型或者Student父類型的元素

 

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.