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

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

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

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

  3.Documented:這個注釋(Annotation)將作為public API的一部分。
  
  4.Inherited : 假設注釋(Annotation)定義的時候使用了Inherited,那么假如這個注釋(Annotation)修飾某個class,這個類的子類也被這個注釋(Annotation)所修飾。
  
  2.3注釋的應用
  
  下面各小節顯示了在哪些情況下可以使用注釋以及如何使用注釋。
  
  2.3.1動態查找注釋
  
  當我們定義好了注釋以后,我們可以開發一些分析工具來解釋這些注釋。這里通常要用到java的反射特性。比如說我們希望找到某個對象/方法/域使用了哪些注釋,或者獲得某個特定的注釋,或者判定是否使用某個特定的注釋, 我們可以參考下面這個例子。
  
  這個例子中定義了兩個注釋:TODO和TOFORMATE。在MyCalculator類中,TODO用來修飾方法calculateRate,而TOFORMATE用來修飾類變量concurrency和debitDate。而在類TestCalculator的main函數中,通過Java反射特性,我們查找到使用這些注釋的類變量和方法。清單12-清單15分別顯示這些類的定義。
  
  清單12 TODO注釋的定義
  
  @Target({ElementType.METHOD})
  @Retention(RetentionPolicy.RUNTIME)
  
  public @interface TODO {
  int PRiority() default 0;
  }
  
  清單13 TOFORMATE的定義
  
  @Target({ElementType.FIELD})
  @Retention(RetentionPolicy.RUNTIME)
  
  public @interface TOFORMATE {
  
  }
  
  清單14 使用注釋的類MyCalculator
  
  public class MyCalculator {
  boolean isReady;
  @TOFORMATE double concurrency;
  @TOFORMATE Date debitDate;
  public MyCalculator() {
  super();
  }
  
  @TODO
  public void calculateRate(){
  System.out.println("Calculating...");
  }
  }
  
  清單15動態查找注釋
  
  public class TestCalculator {
  public static void main(String[] args) {
  MyCalculator cal = new MyCalculator();
  cal.calculateRate();
  try {
  Class c = cal.getClass();
  Method[] methods = c.getDeclaredMethods();
  
  for (Method m: methods) {
  // 判定這個方法有沒有使用TODO
  if (m.isAnnotationPresent(TODO.class))
  System.out.println("Method "+m.getName()+": the TODO is present");
  }
  
  Field[] fields = c.getDeclaredFields();
  for (Field f : fields) {
  // 判定這個域有沒有使用TOFORMATE
  if (f.isAnnotationPresent(TOFORMATE.class))
  System.out.println
  ("Field "+f.getName()+": the TOFORMATE is present");
  }
  } catch (Exception exc) {
  exc.printStackTrace();
  }
  }
  }
  
  下面我們來運行這個例子,這個例子的運行結果如圖10所示。
  
  運行結果和我們先前的定義是一致的。在運行時,我們可以獲得注釋使用的相關信息。
  
 在Eclipse 3.1體驗J2SE 5.0新特性四(圖)(圖一)

  
圖6 運行結果

  
  在我們介紹了什么是注釋以后,你可能會想知道注釋可以應用到什么地方呢?使用注釋有什么好處呢?在下面的小節中我們將介紹一個稍復雜的例子。從這個例子中,你將體會到注釋所以提供的強大的描述機制(declarative programming)。
  
  2.3.2 使用注釋替代Visitor模式
  
  在J2SE 5.0以前,我們在設計應用的時候,我們經常會使用Visitor這個設計模式。Visitor這個模式一般是用于為我們已經設計好了一組類添加方法,而不需要擔心改變定義好的類。比如說我們已經定義了好了一組類結構,但是我們希望將這些類的對象部分數據輸出到某種格式的文件中。
  
  Vistor模式的實現
  
  使用Vistor模式,首先我們在Employee這個類中加入eXPort方法,export方法如圖7所示。Export方法接受Exporter對象作為參數,并在方法體中調用exporter對象的visit()方法。
  
在Eclipse 3.1體驗J2SE 5.0新特性四(圖)(圖二)

  
圖7 使用Vistor模式實現格式輸出

  
  在這里我們定義了一個Exporter抽象類,我們可以通過繼續Exporter類,重寫其visit方法來實現不同格式的文件輸出。
  
  圖7種給出visit方法的實現是一個簡單的例子。假如要實現輸出成xml格式的,可以定義Exporter子類:XMLExporter。假如希望輸出成文本的可以定義TXTExporter。但是這樣做不夠靈活的地方在于,假如Employee加入其他的域變量,那么相應的visitor類也需要進行修改。這就違反了面向對象Open for Extension, close for Modification的原則。
  
  使用注釋替代Vistor模式
  
  使用注釋(Annotation),也可以完成數據輸出的功能。首先定義一個新的注釋類型:@Exportable。然后定義一個抽象的解釋器ExportableGenerator,將Employee 對象傳入解釋器。
  
  在解釋器中,查找哪些域使用了Exportable這個注釋(Annotation),將這些域(Field)按照一定格式輸出。圖12給出了Exportable注釋的定義。
  
  清單16注釋Exportable的定義
  
  @Target({ElementType.FIELD})
  @Retention(RetentionPolicy.RUNTIME)
  @Inherited
  public @interface Exportable {
  }
  清單17-清單20中給出了包含數據的這些類的定義以及這些類是如何使用注釋Exportable的。 圖18定義了Main函數,使用ExporterGenerator來產生輸出文件。清單21給出了使用注釋來實現這一功能的兩個類:ExporterGenerator和TXTExporterGenerator。
  
  其中ExporterGenerator定義了一個基本的框架。而TXTExporterGenerator繼續了ExporterGenerator,并且重寫了outputField方法,在這個方法中實現了特定格式的輸出。用戶可以繼續這個ExporterGenerator,并且實現其中的抽象方法來定義自己期望的格式。
  
  清單17 Employee的類定義
  
  public abstract class Employee {
  public abstract String getName();
  public abstract String getEmpNo();
  public Employee() {
  super();
  }
  }
  
  清單18 Regular的類定義
  
  public class Regular extends Employee{
  @Exportable String name;
  @Exportable String address;
  @Exportable String title;
  @Exportable String phone;
  @Exportable String location;
  @Exportable Date onboardDate;
  @Exportable ArrayList team;
  String empNo;
  
  public Regular(String name, String address, String title, String phone,
  String location, Date date) {
  super();
  this.name = name;
  this.address = address;
  this.title = title;
  this.phone = phone;
  this.location = location;
  onboardDate = date;
  team = new ArrayList();
  }
  
  public void addMemeber(Employee e){
  team.add(e);
  }
  
  @Override
  public String getName() {
  // TODO Auto-generated method stub
  return name;
  }
  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97免费视频在线播放| 成人深夜直播免费观看| 91av视频在线免费观看| 欧美国产日韩中文字幕在线| 欧美超级免费视 在线| 久久久久久久久久久国产| 欧美日韩在线视频首页| 成人乱人伦精品视频在线观看| 精品成人69xx.xyz| 亚洲电影天堂av| 成人有码视频在线播放| 日韩大片免费观看视频播放| 国产日韩在线视频| 欧美中文字幕在线观看| 日韩欧美视频一区二区三区| 欧美—级高清免费播放| 亚洲男人的天堂网站| 国内自拍欧美激情| 欧美激情国产高清| 亚洲片在线资源| 久久99国产精品自在自在app| 2019中文字幕免费视频| 91免费看视频.| 国产精品一二三视频| 久久久在线免费观看| 亚洲激情成人网| 国产精品亚发布| 狠狠躁夜夜躁人人爽天天天天97| 神马久久久久久| 精品国产一区二区三区久久久| 国产一区视频在线| 日韩免费高清在线观看| 色狠狠久久aa北条麻妃| 精品视频久久久久久久| 欧美老少做受xxxx高潮| 国产一区二区黑人欧美xxxx| 欧美日韩精品二区| 福利微拍一区二区| 日韩av理论片| 国产精品视频久久久| 日韩一级裸体免费视频| 欧洲亚洲在线视频| 国产一区二区三区免费视频| 日韩欧美高清在线视频| 午夜精品久久久99热福利| 中文字幕欧美精品日韩中文字幕| 日韩视频免费在线观看| 欧美在线视频观看| 色噜噜国产精品视频一区二区| 国产区亚洲区欧美区| 亚洲精品色婷婷福利天堂| 一区二区三区视频在线| 欧美国产亚洲精品久久久8v| 国产精品视频免费在线| 91精品国产自产在线老师啪| 亚洲国产一区自拍| 国产主播欧美精品| 国产精品久久久久久久久免费看| 欧美精品电影在线| 精品女同一区二区三区在线播放| 国产精品91久久久久久| 成人免费视频在线观看超级碰| 亚洲黄页网在线观看| 7m精品福利视频导航| 亚洲2020天天堂在线观看| 国内精品久久久久久久久| 国产精品羞羞答答| 国产精品免费久久久久久| 国产主播精品在线| 亚洲欧美国产精品久久久久久久| 日韩欧美亚洲国产一区| 日韩成人小视频| 在线免费看av不卡| 日韩在线视频观看| 91精品国产91久久久久| 亚洲高清av在线| 亚洲变态欧美另类捆绑| 亚洲性69xxxbbb| 亚洲成人精品视频| 69**夜色精品国产69乱| 久久久之久亚州精品露出| 美女999久久久精品视频| 日韩不卡在线观看| 国产精品流白浆视频| 中文字幕国产精品久久| 国产精品亚洲视频在线观看| 久久久久久久亚洲精品| 在线看日韩欧美| 精品久久久久久久中文字幕| 欧美肥老妇视频| 精品亚洲永久免费精品| 欧美视频精品一区| 国产乱人伦真实精品视频| 国产精品色视频| 亚洲国产精品成人va在线观看| 欧美激情精品久久久久久变态| 视频一区视频二区国产精品| 91色琪琪电影亚洲精品久久| 精品久久久久久久久久久久久久| 亚洲男人天堂网站| 亚洲精品欧美极品| 国产精品自产拍在线观| 精品高清美女精品国产区| 91亚洲精品久久久久久久久久久久| 日韩精品在线免费播放| 成人激情综合网| 国产91精品视频在线观看| 91久久综合亚洲鲁鲁五月天| 在线电影欧美日韩一区二区私密| 欧美日韩另类视频| 亚洲欧美日韩一区二区在线| 亚洲免费中文字幕| 日韩福利在线播放| 国产成人精品久久| 国产精品欧美日韩| 欧美日本精品在线| 精品久久久久久中文字幕一区奶水| 亚洲性无码av在线| 久久久亚洲影院| 国产精品电影网| 久久免费成人精品视频| 欧美综合国产精品久久丁香| 国产亚洲欧洲高清| 91精品视频免费观看| 亚洲视频777| 国产一区二区三区毛片| 日韩av最新在线| 日韩欧美在线观看视频| 中文字幕日韩欧美在线| 亚洲国产97在线精品一区| 欧美亚洲另类制服自拍| 国产欧美精品日韩| 全亚洲最色的网站在线观看| 欧美另类99xxxxx| 国产精品美乳一区二区免费| 久久天天躁狠狠躁夜夜爽蜜月| 国产91露脸中文字幕在线| 精品福利在线视频| 热99在线视频| 欧美性高跟鞋xxxxhd| 国产精品第二页| 琪琪亚洲精品午夜在线| 一区二区三区四区精品| 91av网站在线播放| 亚洲va久久久噜噜噜| 韩国国内大量揄拍精品视频| 亚洲欧美在线免费| 91麻豆国产精品| 国产精品免费一区二区三区都可以| 亚洲少妇中文在线| 久久人人爽亚洲精品天堂| 九色成人免费视频| 欧美午夜精品久久久久久久| 欧美伊久线香蕉线新在线| 国产精品爱久久久久久久| 欧美激情国产精品| 日韩在线中文字| 免费91在线视频| 欧美巨猛xxxx猛交黑人97人| 2019中文字幕在线免费观看| 91国内产香蕉| 午夜精品久久久久久99热| 中文字幕v亚洲ⅴv天堂| 成人乱人伦精品视频在线观看|