亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Eclipse3.1中體驗J2SE5.0之泛型(組圖)

2019-11-18 13:01:53
字體:
來源:轉載
供稿:網友


  泛型(Generics)簡介
  
  J2SE 5.0中的最顯著的變化之一是添加對泛型類型的支持. 在J2SE 1.4 以及之前的版本中, java程序并不是類型安全的. 例如, Collection framework中定義的List, Map等容器類的元素都是Object類型, 即這個類包含的元素是Object對象. 使用這種方式實現的列表, 可以用來操作整數, 實數, 字符串或者任何對象類型. 例如
  
  清單1.1 類型不安全的代碼示例
  
  List stringList = new ArrayList();
  stringList.add("abcde");
  String str = (String)stringList.get(0);
  
  這種方法實現的列表需要使用強制類型轉換(又稱顯示造型), 因此不是類型安全的. 在上面這段代碼種, 雖然變量名為stringList, 但是我們仍然可以把一個整型對象添加到這個隊列中, 例如,
  
  清單1.2 類型不安全的代碼示例
  
  stringList.add(new Integer(5));
  
  在這種情況下, 從字符列表中獲取對象時, 強制類型轉換就會導致運行時異常.
  
  清單1.3 類型不安全的代碼示例
  
  String str = (String)stringList.get(1); //runtime exception
  
  泛型是Java邁向類型安全的一個重要步驟, 使用泛型可以構造出類型安全的代碼.
  
  聲明泛型
  
  所謂泛型是指類型參數化(parameterized types). Java是一種強類型的語言, 在J2SE 1.4以及以前的版本中, 我們在定義一個Java類, 接口或者方法的時候, 必須指定變量的類型. 在聲明泛型類、接口或者函數時, 定義變量的時候不指定某些變量的具體類型, 而是用一個類型參數代替. 在使用這個類, 接口, 或者方法的時候, 這個類型參數由一個具體類型所代替.
  
  2.1 泛型類
  
  下面的例子中介紹了如何創建一個最簡單泛型類
  
  清單2.1, 最簡單的泛型類
  
  public class GenSample<T> {}
  
  類名后面帶有<T>表明了這個類是泛型類, 其中T被成為類型參數(type parameter), 在使用泛型的時候, 類型參數可以被替換為任何的類類型, 但是不能是原始類型(PRimitive type), 例如int, double.
  
  下面通過一個列表的例子來具體說明假如聲明泛型類和類型參數的用法.
  
  清單2.2, 泛型列表
  
  public class GenList <T>{
  private T[] elements;
  private int size = 0;
  private int length = 0;
  
  public GenList(int size) {
  elements = (T[])new Object[size];
  this.size = size;
  }
  
  public T get(int i) {
  if (i < length) {
  return elements[i];
  }
  return null;
  }
  
  public void add(T e) {
  if (length < size - 1)
  elements[length++] = e;
  }
  }
  
  在列表的例子中, 類型參數T被用來表示列表中的元素的類型, 即, 這個列表中的元素是T類型的.
  
  在使用這個列表時, 這個類型參數T會被具體的類型所替代.
  
  注重, 由于T時類型參數不是具體的類, 所以不能使用new操作符創建T的對象,例如new T(), 或者, new T[10].
  
  2.2 泛型接口
  
  在J2SE 5.0中, 不僅僅可以聲明泛型類, 也可以聲明泛型接口, 聲明泛型接口和聲明泛型類的語法類似, 也是在接口命稱后面加上<T>. 例如,
  
  清單3.2.3, 泛型接口
  
  public interface GenInterface<T> {
  void func(T t);
  }
  
  2.3、聲明多個類型參數的泛型類或者接口
  
  在聲明泛型類的時候, 可是使用多個類型參數. 多個類型參數之間用逗號分開, 例如,
  
  清單3.2.4, 多個類型參數的泛型類
  
  public class GenMap<T, V> {}
  
  Eclipse 3.1的類創建向導支持創建泛型類, 如下圖所示,
  
  圖2.1 使用類向導創建泛型類
  
 Eclipse3.1中體驗J2SE5.0之泛型(組圖)(圖一)

  使用Eclipse接口向導創建泛型接口
  
  圖2.2 使用接口向導創建泛型接口
  
 Eclipse3.1中體驗J2SE5.0之泛型(組圖)(圖二)

  2.4 泛型方法
  
  類型參數(type parameter)不僅僅可以用來聲明泛型類或者泛型接口, 也可以用來聲明泛型方法, 而且這種聲明的泛型方法可以用在非泛型類中, 聲明泛型方法的一般格式是
  
  清單2.5 泛型方法的一般形式
  
  <type-list> return-type method-name(parameter-list) {}
  
  清單3.2.6 泛型方法示例
  
  public <T> String getString(T obj) {
  return obj.toString();
  }
  
  2.5 受限泛型
  
  受限泛型是指類型參數的取值范圍是受到限制的. extends要害字不僅僅可以用來聲明類的繼續關系, 也可以用來聲明類型參數(type parameter)的受限關系.例如, 我們只需要一個存放數字的列表, 包括整數(Long, Integer, Short), 實數(Double, Float), 不能用來存放其他類型, 例如字符串(String), 也就是說, 要把類型參數T的取值泛型限制在Number極其子類中.在這種情況下, 我們就可以使用extends要害字把類型參數(type parameter)限制為數字,
  
  清單2.7 受限泛型示例
  public class Limited<T extends Number> {
  public static void main(String[] args) {
  Limited<Integer> number;  //正確
  Limited<String> str;    //編譯錯誤
  }
  }
  
  在Eclipse 3.1中, 上例中的編譯錯誤信息如下圖所示
  
  圖2.3 由于受限泛型導致的編譯錯誤
  
 Eclipse3.1中體驗J2SE5.0之泛型(組圖)(圖三)

  在程序中使用泛型
  
  3.1在程序中使用泛型類
  
  在創建泛型類的對象的時候, 和創建普通對象基本類似, 必須提供具體的類類型來替代類型參數T (J2SE 5.0目前不支持原始類型作為類型參數(type parameter)).
  
  清單3.1, 使用泛型類
  
  //假如需要整型的列表
  GenList<Integer> integerList = new GenList<Integer>();
  //假如需要字符型的列表
  GenList<String> strList = new GenList<String>();
  //不能使用原始類型
  GenList<int> nList = new GenList<int>(); //編譯錯誤
  
  3.2 使用泛型解決類型安全性問題
  
  使用泛型實現的列表是類型安全的, 下列破壞類型安全語句會在編譯的時候檢查出來。 把鼠標放在錯誤標記上, Eclipse 3.1中的錯誤提示就會顯示,如下圖所示:
  
  圖3.3.2 破壞類型安全引起的錯誤
  
 Eclipse3.1中體驗J2SE5.0之泛型(組圖)(圖四)

  3.3 二義性錯誤
  
  GenMap在聲明是使用了2個類型參數T和V, 因此在創建GenMap的對象的時候也需要提供2個具體的類類型來替代這2個類型參數, 例如,
  
  清單9, 多個參數的泛型類
  
  GenMap<Integer, String> gm = new GenMap<Integer, String>();
  GenMap<String, String> gm2 = new GenMap<String, String>();
  
  上例中, T和V雖然看起來是兩個不同的類型參數, 但是在使用這個泛型類的時候, T和V很有可能被替換成同一種類型. 因此在聲明多個類型參數的泛型類時, 要注重避免這種二義性錯誤, 例如,
  
  清單10, 二義性錯誤
  
  public class GenMap<T, V> {
  //編譯錯誤, 二義性錯誤
  public void set(T t){}
  public void set(V v){}
  }
  
  在上面這段代碼, 假如T和V被替換成同一種類型, set函數的簽名(signature)就是完全一樣的, 所以編譯器會報告二義性錯誤. 正確的用法是聲明2個不同名的方法, 例如,
  
  清單10, 二義性錯誤
  
  public class GenMap<T, V> {
  public void setKey(T t){}
  public void setValue(V v){}
  }
  
  圖3.3 二義性錯誤
  
Eclipse3.1中體驗J2SE5.0之泛型(組圖)(圖五)

  3.4 使用通配符
  
  前面我們創建了泛型的列表, 假如我需要一個方法來處理泛型列表, 例如, 我們希望把列表中的每個元素都打印出來, 但是類型參數(type parameter)只能使用在聲明一個泛型類的時候, 假如類型參數使用在函數定義里會導致編譯錯誤。
  
  public static void print(GenList<T> list){} //編譯錯誤
  
  在這種情況下, 我們需要用另外一種方法來表示一個泛型類, 否則, 就可能需要書寫多個print函數。
  
  public static void print(GenList<Integer> list){}
  public static void print(GenList<Double> list){}
  …
  public static void print(GenList<String> list){}
  
  J2SE 5.0中提供了泛型的通配符"?", "?"可以用來代替任何類型, 例如使用通配符來實現print方法。
  
  public static void print(GenList<?> list) {}
  
  泛型的一些局限型
  
  (1) 類型參數不能實例化, 例如,
  
  T t= new T();  //編譯錯誤
  
  (2) 不能實例化類型參數的數組
  
  T[] ts= new T[10];  //編譯錯誤
  
  (3) 類的靜態變量不能聲明為類型參數類型
  
  public

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
7m第一福利500精品视频| 亚洲日韩欧美视频| 欧美在线观看视频| 欧美日韩亚洲一区二区| 精品亚洲一区二区三区四区五区| 国产精品视频中文字幕91| 国产精品视频精品视频| 激情亚洲一区二区三区四区| 久久久久在线观看| 国产精品女人久久久久久| 永久免费精品影视网站| 51色欧美片视频在线观看| 国产一区二区三区在线| 最近2019年日本中文免费字幕| 欧美精品一二区| 亚洲欧洲黄色网| 精品国产一区二区三区久久久狼| 欧美日韩免费在线| 欧美日韩在线另类| 久久久天堂国产精品女人| 久久人人爽国产| 激情懂色av一区av二区av| 国内揄拍国内精品| 亚洲精品中文字幕有码专区| 国产成人短视频| 欧美大片在线影院| 68精品久久久久久欧美| 亚洲国产成人在线视频| 在线成人中文字幕| 欧美一级淫片播放口| 亚洲毛片在线看| 久久久综合av| 在线电影av不卡网址| 亚洲色图13p| 亚洲人成啪啪网站| 精品久久久久久久久久| 亚洲精品电影在线观看| 国产精品亚洲自拍| 91久久久久久久久久| 亚洲专区在线视频| 日韩美女av在线免费观看| 成人免费xxxxx在线观看| 狠狠躁夜夜躁人人躁婷婷91| 91在线免费看网站| 在线观看欧美成人| 少妇久久久久久| 亚洲a在线观看| 精品久久久久久久久久久久| 久久精品久久精品亚洲人| 久久久亚洲影院你懂的| 国产自产女人91一区在线观看| www.亚洲男人天堂| 国产日韩欧美一二三区| 亚洲欧美综合区自拍另类| 91丨九色丨国产在线| 日本精品性网站在线观看| 欧美性xxxx| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品久久久av| 亚洲字幕一区二区| 国产精品久久久久久av福利软件| 日韩a**中文字幕| 国产成人精品一区| 欧美性资源免费| 日本sm极度另类视频| 亚洲精品在线不卡| 亚洲第一av网站| 午夜免费久久久久| 欧美精品一本久久男人的天堂| 欧美日韩成人在线观看| 96pao国产成视频永久免费| 自拍亚洲一区欧美另类| 日韩成人网免费视频| 日韩性生活视频| 久久久久一本一区二区青青蜜月| 97人人做人人爱| 日韩欧美精品在线观看| 91久久国产精品91久久性色| 国产日韩欧美视频在线| 久久91精品国产91久久跳| 欧美一区二区三区四区在线| 欧美高清一级大片| www欧美xxxx| 黄色成人av在线| 3344国产精品免费看| 国产成人精品视频在线| 亚洲第一国产精品| 日韩国产欧美精品一区二区三区| 在线电影中文日韩| 日韩国产在线看| 久久91亚洲精品中文字幕| xvideos国产精品| 中文字幕日韩精品在线观看| 97精品一区二区三区| 97在线看免费观看视频在线观看| 国产精品免费视频久久久| 亚洲欧美国产制服动漫| 黄色一区二区在线观看| 日韩视频在线观看免费| 欧美插天视频在线播放| 国产亚洲在线播放| 国产日韩欧美91| 久久久久久久色| 亚洲精品乱码久久久久久金桔影视| xxxx性欧美| 久久久精品视频在线观看| 在线看欧美日韩| 91精品国产乱码久久久久久蜜臀| 中文字幕日韩av| 在线视频国产日韩| 欧美体内谢she精2性欧美| 国产xxx69麻豆国语对白| 国产精品流白浆视频| 亚洲欧美日韩网| 一区二区三区国产在线观看| 日本午夜在线亚洲.国产| 91九色视频在线| 88xx成人精品| 久久亚洲欧美日韩精品专区| 久久亚洲精品小早川怜子66| 亚洲女成人图区| 岛国av午夜精品| 国产精品海角社区在线观看| 欧美午夜美女看片| 亚洲偷欧美偷国内偷| 色哟哟网站入口亚洲精品| 亚洲欧美精品中文字幕在线| 亚洲性夜色噜噜噜7777| 亚洲国产天堂久久综合| 亚洲精品自拍偷拍| 久久久久久久激情视频| 久久综合电影一区| 久久久久久香蕉网| 91精品视频专区| 国产69精品久久久久99| 97久久超碰福利国产精品…| 国产剧情久久久久久| 精品久久久国产精品999| 国产精品久久久久久久久| xxav国产精品美女主播| 色香阁99久久精品久久久| 欧美性色19p| 久久精品99国产精品酒店日本| 国产美女久久久| 亚洲xxxxx| 国产精品久久久久久久av电影| 精品香蕉一区二区三区| 日韩中文字幕免费| 91国偷自产一区二区三区的观看方式| 亚洲欧美国产va在线影院| 国产精品高清免费在线观看| 精品美女国产在线| 欧美激情综合色综合啪啪五月| 精品国产依人香蕉在线精品| 日韩精品中文字幕视频在线| 91国自产精品中文字幕亚洲| 亚洲少妇激情视频| 午夜精品一区二区三区在线| 亚洲精品一区二区三区婷婷月| 在线播放国产一区中文字幕剧情欧美| 51精品国产黑色丝袜高跟鞋| 庆余年2免费日韩剧观看大牛| 亚洲国产美女久久久久| 91精品国产成人www|