真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java泛型實(shí)例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹“Java泛型實(shí)例分析”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“Java泛型實(shí)例分析”文章能幫助大家解決問題。

成都創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十多年品質(zhì),值得信賴!

首先,我們來看看泛型Java的經(jīng)典用法:

import java.util.*;

public class UseGeneric

{

  public static void main(String[] args)

  {

    Vectorvi = new Vector();

    vi.add(new Integer(24));

    vi.add(35);

    for(Integer i : vi)

  {

    System.out.println(i);

  }

  }

}

上面的代碼展示了泛型容器、自動裝箱和增強(qiáng)for循環(huán)三項(xiàng)新特性。的確,從簡化代碼的角度來說,這些新特性有一定的幫助——當(dāng)然,自動裝箱其實(shí)不應(yīng)該算一項(xiàng)很有意義的特性,只是因?yàn)镴ava固有的兩套類型體制將int、char等原生類型與對象區(qū)分對待,所以在引入泛型容器時不得不采用自動裝箱作為補(bǔ)救。

將上面的代碼編譯后的class進(jìn)行反編譯,得到下列代碼:

import java.io.PrintStream;

import java.util.Vector;

public class UseGeneric

{

  public UseGeneric()

  {

  }

  public static void main(String args[])

  {

   Vector vector = new Vector();

  vector.add(new Integer(24));

  vector.add(Integer.valueOf(35));

  Integer integer;

  for(SimpleIterator simpleiterator = vector.iterator(); simpleiterator.hasNext(); System.out.println(integer))

  integer = (Integer)simpleiterator.next();

  }

}

可以看到,所有的新特性都是在現(xiàn)有虛擬機(jī)的基礎(chǔ)上實(shí)現(xiàn)的,沒有任何新鮮感可言。的確如Joshua Bloch所說的,只不過是把以前由程序員寫的一些代碼轉(zhuǎn)成由編譯器來寫。

隨后我試圖實(shí)現(xiàn)一些略微高級的泛型技術(shù),例如type traits。我寫了下列代碼:

// General Traits

class NumTraits

{

  public void doSomething()

  {

    System.out.println("General Traits");

  }

}

// Specialized Traits

class NumTraits

{

  public void doSomething()

  {

    System.out.println("Traits for Integer");

  }

}

可惜,這段代碼不能通過編譯,編譯器提示“duplicate class”。顯然,編譯器并沒有把類型參數(shù)作為類名稱的一部分,因此traits是不可能實(shí)現(xiàn)的了。當(dāng)然,在成員方法中可以編寫類似于模板特化(specialization)甚至偏特化(partial-specialization)的代碼,但是下面的代碼將證明這種東西毫無意義。

public class Happy

{

  private T subject = new T();

  publicvoid happy()

  {

    subject.beHappy();

  }

  public static void main(String[] args)

  {

    Happyo1 = new Happy();

    o1.happy();

    Happyo2 = new Happy();

    o2.happy();

  }

}

這里的編譯錯誤有兩種。首先,“private T subject = new T();”這個語句不能編譯,也許是我還沒有找到實(shí)例化類型參數(shù)的正確方法吧。更重要的是,編譯器提示“在java.lang.object中找不到happy()方法”。由于Java采用“擦拭法”實(shí)現(xiàn)泛型,所有類型參數(shù)(除非顯式聲明超類或接口)都將被擦拭為Object,因此方法調(diào)用的契約仍然完全依賴對象系統(tǒng)來保證。換句話說,類似于模板特化之類的技巧不但在效率上毫無幫助,而且根本無法像C++那樣依賴編譯器進(jìn)行比較高級的檢查甚至編譯期計(jì)算。Typelist?select模板?還是不要想了吧。

關(guān)于“Java泛型實(shí)例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。


當(dāng)前名稱:Java泛型實(shí)例分析-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://weahome.cn/article/djjdoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部