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

資訊專欄INFORMATION COLUMN

Java? 教程(有界類型參數(shù))

spacewander / 2972人閱讀

有界類型參數(shù)

有時(shí)你可能希望限制可用作參數(shù)化類型中的類型參數(shù)的類型,例如,對(duì)數(shù)字進(jìn)行操作的方法可能只想接受Number或其子類的實(shí)例,這是有界類型參數(shù)的用途。

要聲明有界類型參數(shù),請(qǐng)列出類型參數(shù)的名稱,然后是extends關(guān)鍵字,后跟其上限,在此示例中為Number,請(qǐng)注意,在此上下文中,extends在一般意義上用于表示“extends”(如在類中)或“implements”(如在接口中)。

public class Box {

    private T t;          

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

    public T get() {
        return t;
    }

    public  void inspect(U u){
        System.out.println("T: " + t.getClass().getName());
        System.out.println("U: " + u.getClass().getName());
    }

    public static void main(String[] args) {
        Box integerBox = new Box();
        integerBox.set(new Integer(10));
        integerBox.inspect("some text"); // error: this is still String!
    }
}

通過修改我們的泛型方法來包含這個(gè)有界類型參數(shù),編譯現(xiàn)在將失敗,因?yàn)槲覀兊?b>inspect調(diào)用仍然包含一個(gè)String

Box.java:21: inspect(U) in Box cannot
  be applied to (java.lang.String)
                        integerBox.inspect("10");
                                  ^
1 error

除了限制可用于實(shí)例化泛型類型的類型之外,有界類型參數(shù)還允許你調(diào)用邊界中定義的方法:

public class NaturalNumber {

    private T n;

    public NaturalNumber(T n)  { this.n = n; }

    public boolean isEven() {
        return n.intValue() % 2 == 0;
    }

    // ...
}

isEven方法通過n調(diào)用Integer類中定義的intValue方法。

多個(gè)邊界

前面的示例說明了使用帶有單個(gè)邊界的類型參數(shù),但是類型參數(shù)可以有多個(gè)邊界:

具有多個(gè)邊界的類型變量是邊界中列出的所有類型的子類型,如果其中一個(gè)邊界是類,則必須首先指定它,例如:

Class A { /* ... */ }
interface B { /* ... */ }
interface C { /* ... */ }

class D  { /* ... */ }

如果未首先指定邊界A,則會(huì)出現(xiàn)編譯時(shí)錯(cuò)誤:

class D  { /* ... */ }  // compile-time error
泛型方法和有界類型參數(shù)

有界類型參數(shù)是通用算法實(shí)現(xiàn)的關(guān)鍵,請(qǐng)考慮以下方法,該方法計(jì)算數(shù)組T[]中大于指定元素elem的元素?cái)?shù)。

public static  int countGreaterThan(T[] anArray, T elem) {
    int count = 0;
    for (T e : anArray)
        if (e > elem)  // compiler error
            ++count;
    return count;
}

該方法的實(shí)現(xiàn)很簡單,但它不能編譯,因?yàn)榇笥谶\(yùn)算符(>)僅適用于基本類型,如shortintdoublelongfloatbytechar,你不能使用>運(yùn)算符來比較對(duì)象,要解決此問題,請(qǐng)使用由Comparable接口限定的類型參數(shù):

public interface Comparable {
    public int compareTo(T o);
}

生成的代碼將是:

public static > int countGreaterThan(T[] anArray, T elem) {
    int count = 0;
    for (T e : anArray)
        if (e.compareTo(elem) > 0)
            ++count;
    return count;
}
上一篇:泛型方法 下一篇:泛型、繼承和子類型

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

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

相關(guān)文章

  • Java? 教程類型擦除)

    類型擦除 泛型被引入到Java語言中,以便在編譯時(shí)提供更嚴(yán)格的類型檢查并支持通用編程,為了實(shí)現(xiàn)泛型,Java編譯器將類型擦除應(yīng)用于: 如果類型參數(shù)是無界的,則用它們的邊界或Object替換泛型類型中的所有類型參數(shù),因此,生成的字節(jié)碼僅包含普通的類、接口和方法。 如有必要,插入類型轉(zhuǎn)換以保持類型安全。 生成橋接方法以保留擴(kuò)展泛型類型中的多態(tài)性。 類型擦除確保不為參數(shù)化類型創(chuàng)建新類,因此,泛型不會(huì)...

    zsy888 評(píng)論0 收藏0
  • Java? 教程(Queue接口)

    Queue接口 Queue是在處理之前保存元素的集合,除了基本的Collection操作外,隊(duì)列還提供額外的插入、刪除和檢查操作,Queue接口如下。 public interface Queue extends Collection { E element(); boolean offer(E e); E peek(); E poll(); E remov...

    RayKr 評(píng)論0 收藏0
  • Java? 教程(泛型、繼承和子類型

    泛型、繼承和子類型 如你所知,只要類型兼容,就可以將一種類型的對(duì)象分配給另一種類型的對(duì)象,例如,你可以將Integer分配給Object,因?yàn)镺bject是Integer的超類型之一: Object someObject = new Object(); Integer someInteger = new Integer(10); someObject = someInteger; // OK ...

    AaronYuan 評(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
  • Java 泛型之上界下界通配符

    摘要:泛型之上界下界通配符本教程是為編寫的。這是在使用泛型編程時(shí)一個(gè)常見的誤解,也是一個(gè)需要學(xué)習(xí)的重要概念。通配符使用指南學(xué)習(xí)使用泛型編程時(shí),更令人困惑的一個(gè)方面是確定何時(shí)使用上限有界通配符以及何時(shí)使用下限有界通配符。 Java 泛型之上界下界通配符 本Java教程是為JDK 8編寫的。本頁描述的示例和實(shí)踐沒有利用后續(xù)版本中引入的改進(jìn)。 泛型,繼承和子類 如你所知,只要類型兼容,就可以將一種...

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

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

0條評(píng)論

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