java泛型中的萬用字元,java泛型萬用字元

來源:互聯網
上載者:User

java泛型中的萬用字元,java泛型萬用字元
概述

       在學習java中泛型這塊內容的時候,剛開始非常容易理解,但是,到萬用字元的時候,我就暈了,因為學習java這塊內容的指導思想,是比對著.net來的,可是java中的萬用字元,.net中沒有這樣的概念,於是花時間學習了一下,下面通過例子向大家講解萬用字元


執行個體代碼 

package com.tgb.mydemo;import java.util.ArrayList;import java.util.List;public class Test {public static void main(String[] args){Integer[] integers = {1,2,3,4,5};ArrayList<Integer> integerList = new ArrayList<Integer>();for (Integer integer : integers) {integerList.add(integer);}System.out.println("Total of the elements in integerList:" + sum(integerList));Double[] doubles = {1.1,2.2,3.3,4.4,5.5};ArrayList<Double> doubleList = new ArrayList<Double>();for (Double element : doubles) {doubleList.add(element);}System.out.println("Total of the elements in integerList:" + sum(doubleList));Number[] numbers = {1.1,2.2,3,4,5.5};ArrayList<Number> numberList = new ArrayList<Number>();for (Number element : numbers) {numberList.add(element);}System.out.println("Total of the elements in integerList:" + sum(numberList));}public static double sum(ArrayList<Number> list){double total = 0;for(Number element : list ){total += element.doubleValue();}return total;}}
       註:Number是Double和Integer的父類

       將上面的代碼放在java的IDE中,會出現語法錯誤,為什麼呢?因為sum函數的參數類型為ArrayList<Number>,我們使用sum函數時,給其傳遞的是ArrayList<Integer>或者ArrayList<Double>類型,雖然Number類型是Double和Integer類型的父類,但是,編譯器不把ArrayList<Number>和ArrayList<Integer>(ArrayList<Double>)當成同一個類型看待,所以,此時,就會在代碼編輯的時候,報錯,如果我們sum中的參數類型換成ArrayList<? extends Number>,就解決了這個問題,而“?”就是萬用字元,這個也就是為什麼出現了萬用字元。


萬用字元和泛型約束的區別

       這裡說的泛型約束是定義泛型類時的泛型約束,從這句話我們也就知道了,泛型約束是在定義泛型類時使用的,是定義泛型類時對泛型做的一個約束,萬用字元是在使用泛型類時,對類型做的一個約束。


萬用字元的約束種類

       萬用字元的約束有3種。

       無約束:<?>,即,類型的父類必須是Object類型。

       上限約束:<? extends 類型1>,即,類型必須是類型1的子類或者是類型1。

       下線約束:<? super 類型1>,即,類型必須是類型1的父類或者是類型1。


總結

       萬用字元使我們在使用泛型類本該給出具體類型的情況,變成了,將具體類型給參數化了的情況,從而使得最終使用者的範圍變得更小了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.