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

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

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

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

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

  
圖3 模板方法的類圖

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

  
圖4 Override應用的例子

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

  
圖5 TODO注釋的非法使用

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美成人小视频 | 欧美爱爱视频网站 | 成人毛片视频在线观看 | 欧美日韩在线播放 | 亚洲午夜免费电影 | 国产成人强伦免费视频网站 | 国产日韩在线观看视频 | 亚洲一区在线视频观看 | www.精品一区 | 免费在线观看成年人视频 | 暴力肉体进入hdxxxx古装 | 91毛片网站 | 久久久成人免费视频 | 视频一区二区三区在线播放 | 4p一女两男做爰在线观看 | 国产成人羞羞视频在线 | 亚洲日本韩国在线观看 | av在线免费播放网站 | 成人一区二区三区四区 | 中文字幕欧美亚洲 | 视频一区二区三区视频 | 斗罗破苍穹在线观看免费完整观看 | 午夜精品久久久久久久爽 | 欧美日韩中文字幕在线视频 | 国产精品久久久久久久久久久久午夜 | 欧美视频首页 | 一区二区三区日韩在线观看 | 一区二区三区在线观看av | 日韩欧美激情视频 | 99最新地址| 91短视频免费 | 午夜生活理论片 | 青草久久久久 | 亚州欧美视频 | 深夜毛片免费看 | 成人午夜视频在线观看免费 | 成人在线视频网 | 49vv看片免费 | 91短视频在线 | 久久久麻豆 | 亚洲精品欧美在线 |