麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

Java高級編程——泛型類型第二部分

2019-11-17 06:34:36
字體:
供稿:網(wǎng)友

  創(chuàng)建泛型和泛型方法
  
  創(chuàng)建一個簡單的泛型是非常輕易的。首先,在一對尖括號(< >)中聲明類型變量,以逗號間隔變量名列表。在類的實(shí)例變量和方法中,可以在任何類型的地方使用那些類型變量。切記,類型變量僅在編譯時存在,所以不能使用instanceof和new這類運(yùn)行時操作符來操作類型變量。
  
  讓我們以一個簡單的例子來開始這部分的學(xué)習(xí),而后將精簡這個例子。這段代碼定義了一個樹形數(shù)據(jù)結(jié)構(gòu),使用類型變量V代表存儲在各個樹結(jié)點(diǎn)中的值。
  
  import Java.util.*;/** * A tree is a data strUCture that holds values of type V. * Each tree has a single value of type V and can have any number of * branches, each of which is itself a Tree. */public class Tree<V> {  // The value of the tree is of type V.  V value;  // A Tree<V> can have branches, each of which is also a Tree<V>  List<Tree<V>> branches = new ArrayList<Tree<V>>();  // Here's the constructor. Note the use of the type variable V.  public Tree(V value) { this.value = value; }
  // These are instance methods for manipulating the node value and branches.
  // Note the use of the type variable V in the arguments or return types.
  V getValue() { return value; }
  void setValue(V value) { this.value = value; }
  int getNumBranches() { return branches.size(); }
  Tree<V> getBranch(int n) { return branches.get(n); }
  void addBranch(Tree<V> branch) { branches.add(branch); }}
  
  正如你所看到的,命名一個類型變量習(xí)慣于一個大寫字母。使用一個字母可以同現(xiàn)實(shí)中那些具有描述性的,長的實(shí)際變量名有所區(qū)別。使用大寫字母要同變量命名規(guī)則一致,并且要區(qū)別于局部變量,方法參數(shù),成員變量,而這些變量經(jīng)常使用一個小寫字母。集合類中,比如java.util中經(jīng)常使用類型變量E代表“Element type”。T和S經(jīng)常用來表示范型變量名(似乎使用i和j作為循環(huán)變量一樣)。
  
  注重到,當(dāng)一個變量被聲明為泛型時,只能被實(shí)例變量和方法調(diào)用(還有內(nèi)嵌類型)而不能被靜態(tài)變量和方法調(diào)用。原因很簡單,參數(shù)化的泛型是一些實(shí)例。靜態(tài)成員是被類的實(shí)例和參數(shù)化的類所共享的,所以靜態(tài)成員不應(yīng)該有類型參數(shù)和他們關(guān)聯(lián)。方法,包括靜態(tài)方法,可以聲明和使用他們自己的類型參數(shù),但是,調(diào)用這樣一個方法,可以被不同地參數(shù)化。這些內(nèi)容將在本章后面談到。
  
  類型變量綁定
  
  上面例子中的Tree<V>中的類型變量V是不受約束的:Tree可以被參數(shù)化為任何類型。以前我們經(jīng)常會設(shè)置一些約束條件在需要使用的類型上:也許我們需要強(qiáng)制一個類型參數(shù)實(shí)現(xiàn)一個或多個接口,或是一個特定類的子類。這可以通過指明類型綁定來完成。我們已經(jīng)看到了統(tǒng)配符的上界,而且使用簡單的語法可以指定一般類型變量的上界。后面的代碼,還是使用Tree這個例子,并且通過實(shí)現(xiàn)Serializable和Comparable來重寫。為了做到這點(diǎn),例子中使用類型變量綁定來確保值類型的Serializable和Comparable。
  
  import java.io.Serializable;import java.util.*;public class Tree<V extends Serializable & Comparable<V>>
  implements Serializable, Comparable<Tree<V>>{
  V value;
  List<Tree<V>> branches = new ArrayList<Tree<V>>();
  public Tree(V value) { this.value = value; }
  // Instance methods  V getValue() { return value; }
  void setValue(V value) { this.value = value; }
  int getNumBranches() { return branches.size(); }
  Tree<V> getBranch(int n) { return branches.get(n); }
  void addBranch(Tree<V> branch) { branches.add(branch); }
  // This method is a nonrecursive implementation of Comparable<Tree<V>>
  // It only compares the value of this node and ignores branches.
  public int compareTo(Tree<V> that) {
  if (this.value == null && that.value == null) return 0;
  if (this.value == null) return -1;
  if (that.value == null) return 1;
  return this.value.compareTo(that.value);
  }
  // javac -Xlint warns us if we omit this field in a Serializable class
  PRivate static final long serialVersionUID = 833546143621133467L;}
  
  一個類型變量的綁定是通過extends后的名字和一個類型列表(這可以是參數(shù)化的,就像Comparable一樣)表達(dá)的。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 一日本道久久久精品国产 | 在线亚洲免费视频 | 毛片免 | 神马久久蜜桃 | 久久精品女人天堂av | 全黄性性激高免费视频 | 久久国产精品成人免费网站 | 成人毛片视频在线播放 | 国产女同玩人妖 | 国产精品久久久久永久免费 | 1级黄色毛片 | 中文字幕四区 | 久久老司机 | 精品亚洲福利一区二区 | 成人福利在线免费观看 | 免费在线看a | 91久久国产露脸精品免费 | 在线免费观看精品 | 黄色网址进入 | 蜜桃网在线观看 | 看av网址 | 国产美女视频一区二区三区 | 91精品国产毛片 | 欧美日韩亚洲精品一区二区三区 | 久久一区国产 | av一道本 | 欧美成人小视频 | 欧美成在线视频 | 91美女福利视频 | www.91sese| 一级黄色在线免费观看 | 特级黄aaaaaaaaa毛片 | 国产一国产一级毛片视频在线 | 色呦呦一区二区三区 | 91九色网 | 国产在线精品一区二区三区不卡 | 日本娇小videos高潮 | h色网站在线观看 | 久草经典视频 | 伊人亚洲精品 | 日本在线免费观看视频 |