国产羞羞的视频在线观看免费-国产羞羞-国产小网站-国产小视频在线免费观看-波多野结衣电影网址

北京北大青鳥(niǎo)學(xué)校學(xué)術(shù)部講解:Java類(lèi)庫(kù)中的泛型(二)

北京北大青鳥(niǎo)學(xué)校學(xué)術(shù)部講解:與非泛型代碼相互操作
北京北大青鳥(niǎo)學(xué)校學(xué)術(shù)部專(zhuān)家表示:數(shù)百萬(wàn)行現(xiàn)有代碼使用已經(jīng)泛型化的Java類(lèi)庫(kù)中的類(lèi),比如集合框架、Class 和 ThreadLocal。JDK 5.0 中的改進(jìn)不要破壞所有這些代碼是很重要的,所以編譯器允許在不指定其類(lèi)型參數(shù)的情況下使用泛型類(lèi)。(北大青鳥(niǎo)課程

當(dāng)然,北京北大青鳥(niǎo)學(xué)校老師表示,以“舊方式”做事沒(méi)有新方式安全,因?yàn)楹雎粤司幾g器準(zhǔn)備提供的類(lèi)型安全。如果試圖將 List<String> 傳遞給一個(gè)接受 List 的方法,它將能夠工作,但是編譯器將會(huì)發(fā)出一個(gè)可能喪失類(lèi)型安全的警告,即所謂的“unchecked conversion(不檢查轉(zhuǎn)換)”警告。(北大青鳥(niǎo)課程

沒(méi)有類(lèi)型參數(shù)的泛型,比如聲明為 List 類(lèi)型而不是 List<Something> 類(lèi)型的變量,叫做原始類(lèi)型。原始類(lèi)型與參數(shù)化類(lèi)型的任何實(shí)例化是賦值兼容的,但是這樣的賦值會(huì)生成 unchecked-conversion 警告。(北大青鳥(niǎo)課程)

為了消除一些 unchecked-conversion 警告,假設(shè)您不準(zhǔn)備泛型化所有的代碼,您可以使用通配符類(lèi)型參數(shù)。使用 List<?> 而不使用 List。List 是原始類(lèi)型;List<?> 是具有未知類(lèi)型參數(shù)的泛型。編譯器將以不同的方式對(duì)待它們,并很可能發(fā)出更少的警告。

北京北大青鳥(niǎo)學(xué)校老師介紹,無(wú)論在哪種情況下,編譯器在生成字節(jié)碼時(shí)都會(huì)生成強(qiáng)制類(lèi)型轉(zhuǎn)換,所以生成的字節(jié)碼在每種情況下都不會(huì)比沒(méi)有泛型時(shí)更不安全。如果您設(shè)法通過(guò)使用原始類(lèi)型或類(lèi)文件來(lái)破壞類(lèi)型安全,就會(huì)得到與不使用泛型時(shí)得到的相同的 ClassCastException 或 ArrayStoreException。(北大青鳥(niǎo)課程


已檢查集合

作為從原始集合類(lèi)型遷移到泛型集合類(lèi)型的幫助,集合框架添加了一些新的集合包裝器,以便為一些類(lèi)型安全bug提供早期警告。就像 Collections.unmodifiableSet() 工廠方法用一個(gè)不允許任何修改的 Set 包裝一個(gè)現(xiàn)有 Set 一樣,Collections.checkedSet()(以及 checkedList() 和 checkedMap())工廠方法創(chuàng)建一個(gè)包裝器(或者視圖)類(lèi),以防止您將錯(cuò)誤類(lèi)型的變量放在集合中。(北大青鳥(niǎo)課程

checkedXxx() 方法都接受一個(gè)類(lèi)常量作為參數(shù),所以它們可以(在運(yùn)行時(shí))檢查這些修改是允許的。典型的實(shí)現(xiàn)可能像下面這樣:

public class Collections {
public static <E> Collection<E> checkedCollection(Collection<E> c, Class<E> type ) {
    return new CheckedCollection<E>(c, type);
}
private static class CheckedCollection<E> implements Collection<E> {
    private final Collection<E> c;
    private final Class<E> type;
    CheckedCollection(Collection<E> c, Class<E> type) {
      this.c = c;
      this.type = type;
    }
    public boolean add(E o) {
      if (!type.isInstance(o))
        throw new ClassCastException();
      else
        return c.add(o);
    }
}
} (北大青鳥(niǎo)課程
北京北大青鳥(niǎo)學(xué)校提供

北大青鳥(niǎo)網(wǎng)上報(bào)名
北大青鳥(niǎo)招生簡(jiǎn)章
主站蜘蛛池模板: | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |