国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

在Eclipse 3.1體驗(yàn)J2SE 5.0新特性三(圖)

2019-11-18 13:01:22
字體:
供稿:網(wǎng)友

  2.2.1注釋的類型
  
  從上面的例子中,我們可以看出,按照使用者所需要傳入的參數(shù)數(shù)目, 注釋(Annotation)的類型可以分為三種。
  
  第一種是標(biāo)記注釋類型:
  
  標(biāo)記注釋(Marker)是最簡(jiǎn)單的注釋, 不需要定義任何域。下面要介紹的Override和DePRecated都是標(biāo)記類型的。當(dāng)然,假如一個(gè)注釋類型提供了所有域的缺省值,那么這個(gè)注釋類型也可以認(rèn)為是一個(gè)注釋類型。使用標(biāo)記類型的語法很簡(jiǎn)單。
  
  清單7 標(biāo)記注釋的用法
  
  @MarkerAnnotation
  
  第二種是單值注釋類型:單值注釋類型只有一個(gè)域。語法也很簡(jiǎn)單:
  
  清單8 單值注釋的用法
  
  @SingleValueAnnotation("some value")
  
  第三種是全值注釋類型。 全注釋類型其實(shí)并不算是一個(gè)真正的類型,只是使用注釋類型完整的語法:
  
  清單9 全值注釋的用法
  
  @MultipleValueAnnotation(
  key1=value1,
  key2=value2,
  key3=value3,
  )
  
  2.2.2 J2SE的內(nèi)建注釋(build-in annotation)
  
  在程序中不僅可以使用自己定義的注釋,還可以使用J2SE5.0中內(nèi)建的注釋類型。下面我們就具體來介紹J2SE5.0提供的注釋類型。J2SE 5.0中預(yù)定義了三種注釋注釋類型:
  
  Override :java.lang.Override 表示當(dāng)前的方法重寫了父類的某個(gè)方法,假如父類的對(duì)應(yīng)的方法并不存在,將會(huì)發(fā)生編譯錯(cuò)誤。
  
  Deprecated:java.lang.Deprecated 表示 并不鼓勵(lì)使用當(dāng)前的方法或者域變量。
  
  SuppressWarnings: java.lang.SuppressWarnings關(guān)閉編譯器告警,這樣,在編譯1.5之前的代碼的時(shí)候,不會(huì)出現(xiàn)大量不關(guān)心的無關(guān)的告警。
  
  下面舉一個(gè)使用Override的例子。Override這個(gè)注釋類型在使用模板方法(Template Method,圖3)非常有用。熟悉設(shè)計(jì)模式的讀者們一定知道,模板方法中通常定義了抽象類,并且這個(gè)抽象類中定義了主要的控制流。
  
  子類就是通過重寫父類中控制流中所調(diào)用的方法來實(shí)現(xiàn)自己的邏輯。有的時(shí)候,父類會(huì)將這些方法定義為抽象方法,但是有的時(shí)候也會(huì)提供缺省實(shí)現(xiàn)。在后者的情況下,子類可以不實(shí)現(xiàn)這個(gè)方法。
  
  這樣就帶來一個(gè)問題,假如你希望在子類中重寫這個(gè)方法,但是無意中寫錯(cuò)了方法的名字,這個(gè)錯(cuò)誤是很難被發(fā)現(xiàn)的。
  
  因?yàn)槟阆M貙懙倪@個(gè)方法,會(huì)被編譯器當(dāng)作一個(gè)新的方法而不是重寫父類的方法。而現(xiàn)在使用@Override,這個(gè)擔(dān)心就是不必要的。假如你拼錯(cuò)了你希望重寫的方法,編譯器會(huì)報(bào)錯(cuò),告訴你父類沒有相應(yīng)的方法。
  
 在Eclipse 3.1體驗(yàn)J2SE 5.0新特性三(圖)(圖一)

  
圖3 模板方法的類圖

  
  清單10給出了模板方法的一個(gè)例子。這個(gè)例子中有定義了兩個(gè)類,SubClass和BaseClass。其中SubClass繼續(xù)了BaseClass,并且希望重寫B(tài)aseClass的方法doPartII()。
  
  然而SubClass中錯(cuò)誤的拼寫了這個(gè)方法的名稱。圖3顯示了SubClass中的編譯錯(cuò)誤。熟悉eclipse的讀者會(huì)看到在編輯器里出現(xiàn)了Error Marker,說明這一行有編譯錯(cuò)誤。將鼠標(biāo)指向這行,顯示了錯(cuò)誤信息。
  
  清單10 模板方法
  public abstract class BaseClass{ //模板方法的基類
  public void doWork(){
  doPartI(); //先調(diào)用doPartI()方法
  doPartII();//之后調(diào)用doPartII()方法
  }
  public abstract void doPartI();
  public void doPartII(){
  }
  }
  public class SubClass extend BaseClass{
  public void doPartI(){
  };
  @Override
  public void doPortII(){//拼寫錯(cuò)誤,產(chǎn)生編譯錯(cuò)誤
  System.out.println("override the method of superclass");
  }
  }
  
 在Eclipse 3.1體驗(yàn)J2SE 5.0新特性三(圖)(圖二)

  
圖4 Override應(yīng)用的例子

  
  2.2.3 注釋的注釋
  
  值得注重的是,J2SE5.0還提供了四種用于注釋的注釋類型。有以下的四種:
  
  1. Target:用來指定這個(gè)注釋(Annotation)是為哪種類型而定義的。比如,這個(gè)類型可能只是為method定義的。比如override,不能用@override來修飾class或者field。
  
  比如清單11中定義了一個(gè)注釋:TODO,而這個(gè)注釋定義了Target為ElementType.method。因此,TODO只能用來修飾方法,不能用來修飾類或者類變量。圖5中給出了一個(gè)非法使用TODO的例子。
  
  在MyCalculator中,定義了一個(gè)布爾型的變量 isReady,假如用TODO來修飾這個(gè)類變量的話,會(huì)出現(xiàn)編譯錯(cuò)誤。而用TODO來修飾方法calculateRate(),則不會(huì)出現(xiàn)編譯錯(cuò)誤。這是因?yàn)門ODO的定義已經(jīng)規(guī)定了,只能用來修飾方法。
  
  清單11 Target的用法
  
  @Target({ElementType.METHOD})
  public @interface TODO {
  int priority() default 0;
  }
  
在Eclipse 3.1體驗(yàn)J2SE 5.0新特性三(圖)(圖三)

  
圖5 TODO注釋的非法使用

  
  2.Retention:Retention的策略可以從以下三種中選取:
  
  RetentionPolicy.SOURCE:編譯器編譯之后會(huì)會(huì)從class file中除去注釋(Annotation)。
  
  Retention.CLASS:注釋(Annotation)保留在class file中,但是VM不會(huì)處理。
  
  RetentionPolicy.RUNTIME,:注釋(Annotation)保留在class file,VM會(huì)進(jìn)行處理。
  
  請(qǐng)注重,假如你希望在運(yùn)行時(shí)查找到這些注釋在什么地方被用到,一定要在定義注釋的時(shí)候,選擇RetentionPolicy.RUNTIME,否則即使你用注釋修飾了類變量或者方法,在運(yùn)行時(shí)也沒有辦法獲得這個(gè)信息的。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新龙县| 会东县| 郑州市| 永修县| 合肥市| 大埔县| 五莲县| 嘉黎县| 乳山市| 简阳市| 杂多县| 新巴尔虎右旗| 迁西县| 林口县| 鹿泉市| 沾化县| 柳江县| 通化县| 南阳市| 康马县| 肥乡县| 黎城县| 兴义市| 巴里| 鄂伦春自治旗| 博乐市| 平乡县| 廊坊市| 怀宁县| 伽师县| 玉溪市| 稷山县| 泸西县| 桃源县| 汨罗市| 肇州县| 苏州市| 宁津县| 青阳县| 贵港市| 湖北省|