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

資訊專欄INFORMATION COLUMN

Java? 教程(泛型類型)

Crazy_Coder / 2621人閱讀

泛型類型

泛型類型是通過類型參數(shù)化的泛型類或接口,修改以下Box類以演示此概念。

一個(gè)簡(jiǎn)單的Box類

首先檢查一個(gè)對(duì)任何類型的對(duì)象進(jìn)行操作的非泛型Box類,它只需要提供兩個(gè)方法:set,它將一個(gè)對(duì)象添加到box中,get,它將檢索它:

public class Box {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

由于它的方法接受或返回一個(gè)Object,所以你可以自由地傳入任何你想要的東西,前提是它不是一種原始類型,無法在編譯時(shí)沒有辦法驗(yàn)證如何使用該類,代碼的一部分可能會(huì)在box中放置一個(gè)Integer并期望從中獲取Integer,而代碼的另一部分可能會(huì)錯(cuò)誤地傳入String,從而導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。

Box類的泛型版本

泛型類使用以下格式定義:

class name { /* ... */ }

由尖括號(hào)(<>)分隔的類型參數(shù)部分跟在類名后面,它指定類型參數(shù)(也稱為類型變量)T1, T2, ...Tn

要更新Box類以使用泛型,可以通過將代碼“public class Box”更改為“public class Box ”來創(chuàng)建泛型類型聲明,這引入了類型變量T,可以在類中的任何位置使用。

通過此更改,Box類變?yōu)椋?/p>

/**
 * Generic version of the Box class.
 * @param  the type of the value being boxed
 */
public class Box {
    // T stands for "Type"
    private T t;

    public void set(T t) { this.t = t; }
    public T get() { return t; }
}

如你所見,所有出現(xiàn)的Object都被T替換,類型變量可以是你指定的任何非基本類型:任何類類型、任何接口類型、任何數(shù)組類型,甚至是其他類型變量。

可以應(yīng)用相同的技術(shù)來創(chuàng)建泛型接口。

類型參數(shù)命名約定

按照慣例,類型參數(shù)名稱是單個(gè)大寫字母,這與你已經(jīng)了解的變量命名約定形成鮮明對(duì)比,并且有充分的理由:如果沒有這種約定,就很難區(qū)分類型變量和普通類或接口名稱。

最常用的類型參數(shù)名稱是:

E — 元素(Java集合框架廣泛使用)

K — 鍵

N — 數(shù)

T — 類型

V — 值

S、U、V等 — 第二、第三、第四種類型

你將在整個(gè)Java SE API和本課程的其余部分中看到這些名稱。

調(diào)用和實(shí)例化泛型類型

要從代碼中引用泛型Box類,必須執(zhí)行泛型類型調(diào)用,它將T替換為某些具體值,例如Integer

Box integerBox;

你可以將泛型類型調(diào)用視為與普通方法調(diào)用類似,但不是將參數(shù)傳遞給方法,而是將類型參數(shù)(在本例中為Integer)傳遞給Box類本身。

類型參數(shù)和類型參數(shù)術(shù)語:許多開發(fā)人員互換地使用術(shù)語“類型參數(shù)”和“類型實(shí)參”,但這些術(shù)語并不相同,編碼時(shí),提供類型實(shí)參以創(chuàng)建參數(shù)化類型,因此,Foo中的T是類型參數(shù),而Foo f中的String是類型實(shí)參,本課程在使用這些術(shù)語時(shí)會(huì)遵循此定義。

與任何其他變量聲明一樣,此代碼實(shí)際上并不創(chuàng)建新的Box對(duì)象,它只是聲明integerBox將保存對(duì)“Box of Integer”的引用,這就是Box的讀取方式。

泛型類型的調(diào)用通常稱為參數(shù)化類型。

要實(shí)例化此類,請(qǐng)像往常一樣使用new關(guān)鍵字,但在類名和括號(hào)之間放置

Box integerBox = new Box();
菱形

在Java SE 7及更高版本中,只要編譯器可以從上下文中確定或推斷類型參數(shù),就可以用一組空的類型參數(shù)(<>)替換調(diào)用泛型類的構(gòu)造函數(shù)所需的類型參數(shù),這對(duì)尖括號(hào)<>非正式地稱為菱形,例如,你可以使用以下語句創(chuàng)建Box的實(shí)例:

Box integerBox = new Box<>();

有關(guān)菱形表示法和類型推斷的更多信息,請(qǐng)參閱類型推斷。

多個(gè)類型參數(shù)

如前所述,泛型類可以有多個(gè)類型參數(shù),例如,OrderedPair泛型類,它實(shí)現(xiàn)了Pair泛型接口:

public interface Pair {
    public K getKey();
    public V getValue();
}

public class OrderedPair implements Pair {

    private K key;
    private V value;

    public OrderedPair(K key, V value) {
    this.key = key;
    this.value = value;
    }

    public K getKey()    { return key; }
    public V getValue() { return value; }
}

以下語句創(chuàng)建OrderedPair類的兩個(gè)實(shí)例:

Pair p1 = new OrderedPair("Even", 8);
Pair  p2 = new OrderedPair("hello", "world");

代碼new OrderedPair,將K實(shí)例化為String,將V實(shí)例化為Integer,因此,OrderedPair的構(gòu)造函數(shù)的參數(shù)類型分別是StringInteger,由于自動(dòng)裝箱,將Stringint傳遞給類是有效的。

正如菱形中所提到的,因?yàn)镴ava編譯器可以從聲明OrderedPair推斷出KV類型,所以可以使用菱形表示法縮短這些語句:

OrderedPair p1 = new OrderedPair<>("Even", 8);
OrderedPair  p2 = new OrderedPair<>("hello", "world");

要?jiǎng)?chuàng)建泛型接口,請(qǐng)遵循與創(chuàng)建泛型類相同的約定。

參數(shù)化類型

你還可以使用參數(shù)化類型(即List)替換類型參數(shù)(即KV),例如,使用OrderedPair示例:

OrderedPair> p = new OrderedPair<>("primes", new Box(...));
上一篇:為什么要使用泛型? 下一篇:泛型原始類型

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

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

相關(guān)文章

  • Java? 教程(目錄)

    Java? 教程 Java教程是為JDK 8編寫的,本頁面中描述的示例和實(shí)踐沒有利用在后續(xù)版本中引入的改進(jìn)。 Java教程是希望使用Java編程語言創(chuàng)建應(yīng)用程序的程序員的實(shí)用指南,其中包括數(shù)百個(gè)完整的工作示例和數(shù)十個(gè)課程,相關(guān)課程組被組織成教程。 覆蓋基礎(chǔ)知識(shí)的路徑 這些教程以書籍的形式提供,如Java教程,第六版,前往Amazon.com購買。 入門 介紹Java技術(shù)和安裝Java開發(fā)軟件并使用...

    lifesimple 評(píng)論0 收藏0
  • Java? 教程類型推斷)

    類型推斷 類型推斷是Java編譯器查看每個(gè)方法調(diào)用和相應(yīng)聲明的能力,以確定使調(diào)用適用的類型參數(shù),推理算法確定參數(shù)的類型,如果可用,還確定分配或返回結(jié)果的類型,最后,推理算法嘗試查找適用于所有參數(shù)的最具體類型。 為了說明最后一點(diǎn),在下面的示例中,推斷確定傳遞給pick方法的第二個(gè)參數(shù)是Serializable類型: static T pick(T a1, T a2) { return a2; } ...

    JerryC 評(píng)論0 收藏0
  • Java? 教程泛型原始類型

    泛型原始類型 原始類型是沒有任何類型參數(shù)的泛型類或接口的名稱,例如,給定Box泛型類: public class Box { public void set(T t) { /* ... */ } // ... } 要?jiǎng)?chuàng)建參數(shù)化類型的Box,請(qǐng)為形式類型參數(shù)T提供實(shí)際類型參數(shù): Box intBox = new Box(); 如果省略實(shí)際的類型參數(shù),則創(chuàng)建一個(gè)原始類型Box: Box...

    史占廣 評(píng)論0 收藏0
  • Java? 教程(為什么要使用泛型?)

    泛型 在任何重要的軟件項(xiàng)目中,bug都是不可避免的,仔細(xì)的規(guī)劃、編程和測(cè)試可以幫助減少它們的普遍性,但是它們總會(huì)在某個(gè)地方以某種方式潛入你的代碼,隨著新功能的引入以及你的代碼庫在規(guī)模和復(fù)雜性方面的增長(zhǎng),這一點(diǎn)變得尤為明顯。 幸運(yùn)的是,一些錯(cuò)誤比其他錯(cuò)誤更容易被發(fā)現(xiàn),例如,編譯時(shí)錯(cuò)誤可以在早期檢測(cè)到,你可以使用編譯器的錯(cuò)誤消息來確定問題所在并立即修復(fù)它。但是,運(yùn)行時(shí)錯(cuò)誤可能會(huì)更成問題,它們并不總是立...

    MudOnTire 評(píng)論0 收藏0
  • Java? 教程泛型方法)

    泛型方法 泛型方法是引入其自己的類型參數(shù)的方法,這類似于聲明泛型類型,但類型參數(shù)的范圍僅限于聲明它的方法,允許使用靜態(tài)和非靜態(tài)泛型方法,以及泛型類構(gòu)造函數(shù)。 泛型方法的語法包括類型參數(shù)列表,在尖括號(hào)內(nèi),它出現(xiàn)在方法的返回類型之前,對(duì)于靜態(tài)泛型方法,類型參數(shù)部分必須出現(xiàn)在方法的返回類型之前。 Util類包含一個(gè)泛型方法compare,它比較兩個(gè)Pair對(duì)象: public class Util { ...

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

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

0條評(píng)論

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