国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

泛型的優(yōu)勢(shì)和使用方法

_DangJin / 538人閱讀

摘要:為什么使用泛型泛型類和泛型方法同時(shí)具備可重用性類型安全和效率,這是非泛型類和非泛型方法無法具備的。泛型通常用與集合以及作用于集合的方法一起使用。泛型方法泛型方法,是在調(diào)用方法的時(shí)候指明泛型的具體類型。

為什么使用泛型

泛型類和泛型方法同時(shí)具備可重用性、類型安全和效率,這是非泛型類和非泛型方法無法具備的。 泛型通常用與集合以及作用于集合的方法一起使用。
可重用性:
比如要返回兩個(gè)信息,一種是String類型的信息,一種是Integer類型的信息。
不使用泛型的話我們要添加兩個(gè)方法,一個(gè)返回字符串,另一個(gè)返回?cái)?shù)值類型 。

public String getString(String stringMessage){
        return stringMessage;
    }
    public Integer getInteger(Integer integerMessage){
        return  integerMessage;
    }

而使用泛型

public class Generic {
    private T key;

    public Generic(T key) {
        this.key = key;
    }

    public T getKey() {
        return key;
    }
}

(如果用字符串和數(shù)值的強(qiáng)制轉(zhuǎn)換,不使用泛型也可以用一個(gè)方法實(shí)現(xiàn),但是有類型安全和高效率方面的問題)

類型安全:
先來看一下List的實(shí)現(xiàn)方式了。在List中可以放各種各樣的數(shù)據(jù)類型,不論你push中的元素是什么,都變?yōu)镺bject類型。而且值類型向Object轉(zhuǎn)換時(shí),還得采取裝箱操作,拿出來還得拆箱操作,很容易出現(xiàn)InvalidCastException異常。而泛型集合一旦聲明了是何種數(shù)據(jù)類型的集合,就只能添加何種數(shù)據(jù)類型,不會(huì)轉(zhuǎn)換成Object。
高效率
泛型集合一旦聲明了是何種數(shù)據(jù)類型的集合,就只能添加何種數(shù)據(jù)類型。添加去也不會(huì)轉(zhuǎn)換成Object,它是運(yùn)行時(shí)動(dòng)態(tài)的獲取類型參數(shù)。也就是說沒有裝箱和拆箱這些操作。減少了處理器的資源浪費(fèi)。

泛型的特性

泛型只在編譯階段有效。看下面的代碼:

List stringArrayList = new ArrayList();
List integerArrayList = new ArrayList();

Class classStringArrayList = stringArrayList.getClass();
Class classIntegerArrayList = integerArrayList.getClass();

if(classStringArrayList.equals(classIntegerArrayList)){
    Log.d("泛型測(cè)試","類型相同");
}

輸出結(jié)果:D/泛型測(cè)試: 類型相同。

通過上面的例子可以證明,在編譯之后程序會(huì)采取去泛型化的措施。也就是說Java中的泛型,只在編譯階段有效。在編譯過程中,正確檢驗(yàn)泛型結(jié)果后,會(huì)將泛型的相關(guān)信息擦出,并且在對(duì)象進(jìn)入和離開方法的邊界處添加類型檢查和類型轉(zhuǎn)換的方法。也就是說,泛型信息不會(huì)進(jìn)入到運(yùn)行時(shí)階段。

泛型方法

泛型方法,是在調(diào)用方法的時(shí)候指明泛型的具體類型 。

下面的例子演示了如何使用泛型方法打印不同字符串的元素:

public class GenericMethodTest
{
   // 泛型方法 printArray                         
   public static < E > void printArray( E[] inputArray )
   {
      // 輸出數(shù)組元素            
         for ( E element : inputArray ){        
            System.out.printf( "%s ", element );
         }
         System.out.println();
    }
 
    public static void main( String args[] )
    {
        // 創(chuàng)建不同類型數(shù)組: Integer, Double 和 Character
        Integer[] intArray = { 1, 2, 3, 4, 5 };
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
        Character[] charArray = { "H", "E", "L", "L", "O" };
 
        System.out.print( "整型數(shù)組元素為:" );
        printArray( intArray  ); // 傳遞一個(gè)整型數(shù)組
 
        System.out.print( "
雙精度型數(shù)組元素為:" );
        printArray( doubleArray ); // 傳遞一個(gè)雙精度型數(shù)組
 
        System.out.print( "
字符型數(shù)組元素為:" );
        printArray( charArray ); // 傳遞一個(gè)字符型數(shù)組
    } 
}

編譯以上代碼,運(yùn)行結(jié)果如下所示:

整型數(shù)組元素為:1 2 3 4 5

雙精度型數(shù)組元素為:1.1 2.2 3.3 4.4

字符型數(shù)組元素為:H E L L O

類型通配符

類型通配符一般是使用?代替具體的類型參數(shù)。例如 List 在邏輯上是List,List 等所有List<具體類型實(shí)參>的父類

public class GenericTest {
     
    public static void main(String[] args) {
        List name = new ArrayList();
        List age = new ArrayList();
        List number = new ArrayList();
        
        name.add("icon");
        age.add(18);
        number.add(314);
 
        getData(name);
        getData(age);
        getData(number);
       
   }
 
   public static void getData(List data) {
      System.out.println("data :" + data.get(0));
   }
}

輸出結(jié)果為:

data :icon
data :18
data :314

泛型數(shù)組

在java中是”不能創(chuàng)建一個(gè)確切的泛型類型的數(shù)組”的。

下面的這個(gè)例子是不可以的,編譯階段會(huì)直接提示錯(cuò)誤:

List[] ls = new ArrayList[10];  

而使用通配符創(chuàng)建泛型數(shù)組是可以的,如下面這個(gè)例子:

List[] ls = new ArrayList[10];  

這樣也是可以的:

List[] ls = new ArrayList[10];





文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/76424.html

相關(guān)文章

  • 教妹學(xué) Java:晦澀難懂的泛型

    摘要:首先,我們來按照泛型的標(biāo)準(zhǔn)重新設(shè)計(jì)一下類。注意參數(shù)為而不是泛型。利用形式的通配符,可以實(shí)現(xiàn)泛型的向上轉(zhuǎn)型,來看例子。需要注意的是,無法從這樣類型的中取出數(shù)據(jù)。showImg(https://user-gold-cdn.xitu.io/2019/5/17/16ac3bf3eb16160c); 00、故事的起源 二哥,要不我上大學(xué)的時(shí)候也學(xué)習(xí)編程吧?有一天,三妹突發(fā)奇想地問我。 你確定要做一名...

    Crazy_Coder 評(píng)論0 收藏0
  • java的集合型的知識(shí)點(diǎn)歸納1

    摘要:接口也是集合中的一員,但它與接口有所不同,接口與接口主要用于存儲(chǔ)元素,而主要用于迭代訪問即遍歷中的元素,因此對(duì)象也被稱為迭代器。迭代器的實(shí)現(xiàn)原理我們?cè)谥鞍咐呀?jīng)完成了遍歷集合的整個(gè)過程。 【Collection、泛型】 主要內(nèi)容 Collection集合 迭代器 增強(qiáng)for 泛型 教學(xué)目標(biāo) [ ] 能夠說出集合與數(shù)組的區(qū)別 [ ] 說出Collection集合的常用功能 [ ]...

    daryl 評(píng)論0 收藏0
  • 聊聊Java的泛型及實(shí)現(xiàn)

    摘要:靜態(tài)變量是被泛型類的所有實(shí)例所共享的。所以引用能完成泛型類型的檢查。對(duì)于這個(gè)類型系統(tǒng),有如下的一些規(guī)則相同類型參數(shù)的泛型類的關(guān)系取決于泛型類自身的繼承體系結(jié)構(gòu)。事實(shí)上,泛型類擴(kuò)展都不合法。 前言 和C++以模板來實(shí)現(xiàn)靜多態(tài)不同,Java基于運(yùn)行時(shí)支持選擇了泛型,兩者的實(shí)現(xiàn)原理大相庭徑。C++可以支持基本類型作為模板參數(shù),Java卻只能接受類作為泛型參數(shù);Java可以在泛型類的方法中取得...

    lewif 評(píng)論0 收藏0
  • Java隨筆-Java型的一點(diǎn)學(xué)習(xí)

    摘要:以上代碼編譯通過,運(yùn)行通過引入泛型的同時(shí),也為了兼容之前的類庫,開始引入的其實(shí)是偽泛型,在生成的字節(jié)碼中是不包含泛型中的類型信息的。進(jìn)行類型擦除后,類型參數(shù)原始類型就是擦除去了泛型信息,最后在字節(jié)碼中的類型變量的真正類型。 Java泛型 Java泛型(generics)是JDK 5中引入的一個(gè)新特性,允許在定義類和接口的時(shí)候使用類型參數(shù)(type parameter)。聲明的類型參數(shù)在...

    codeGoogle 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<