<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    七段

    無論怎樣,請(qǐng)讓我先感謝一下國(guó)家。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      35 Posts :: 2 Stories :: 7 Comments :: 0 Trackbacks
    Pros and Cons:

    Pros:

    1, reduce configuration xml files

    2, readable by self-documenting

    Cons:

    1, it adds deployment context to classes, which should be generic enough.

    2, interfere with design principles such as IOC and dependency injection, because you need to introduce imports

    Usage (annotation works only when handled by related annotation processor):

    • Information for the compiler — Annotations can be used by the compiler to detect errors or suppress warnings.
    • Compiler-time and deployment-time processing — Software tools can process annotation information to generate code, XML files, and so forth.
    • Runtime processing — Some annotations are available to be examined at runtime.

      1 import java.io.IOException;
      2 import java.io.PrintStream;
      3 import java.lang.reflect.AnnotatedElement;
      4 import java.lang.annotation.Annotation;
      5 
      6 import java.util.Date;
      7 import java.lang.annotation.Documented;
      8 import java.lang.annotation.Inherited;
      9 import java.lang.annotation.Retention;
     10 import java.lang.annotation.RetentionPolicy;
     11 
     12 public class ReflectionTester {
     13 
     14   public ReflectionTester() {
     15   }
     16 
     17   public void testAnnotationPresent(PrintStream out) throws IOException {
     18     Class c = Super.class;
     19     boolean inProgress = c.isAnnotationPresent(InProgress.class);
     20     if (inProgress) {
     21       out.println("Super is In Progress");
     22     } else {
     23       out.println("Super is not In Progress");
     24     }
     25   }
     26 
     27   public void testInheritedAnnotation(PrintStream out) throws IOException {
     28     Class c = Sub.class;
     29     boolean inProgress = c.isAnnotationPresent(InProgress.class);
     30     if (inProgress) {
     31       out.println("Sub is In Progress");
     32     } else {
     33       out.println("Sub is not In Progress");
     34     }
     35   }
     36 
     37   public void testGetAnnotation(PrintStream out) 
     38     throws IOException, NoSuchMethodException {
     39 
     40     Class c = AnnotationTester.class;
     41     AnnotatedElement element = c.getMethod("calculateInterest"
     42                                   float.classfloat.class);
     43 
     44     GroupTODO groupTodo = element.getAnnotation(GroupTODO.class);
     45     String assignedTo = groupTodo.assignedTo();
     46 
     47     out.println("TODO Item on Annotation Tester is assigned to: '" + 
     48         assignedTo + "'");
     49   }
     50 
     51   public void printAnnotations(AnnotatedElement e, PrintStream out)
     52     throws IOException {
     53 
     54     out.printf("Printing annotations for '%s'%n%n", e.toString());
     55 
     56     Annotation[] annotations = e.getAnnotations();
     57     for (Annotation a : annotations) {
     58       out.printf("    * Annotation '%s' found%n"
     59         a.annotationType().getName());
     60     }
     61   }
     62 
     63   public static void main(String[] args) {
     64     try {
     65       ReflectionTester tester = new ReflectionTester();
     66 
     67       tester.testAnnotationPresent(System.out);
     68       tester.testInheritedAnnotation(System.out);
     69 
     70       tester.testGetAnnotation(System.out);
     71 
     72       Class c = AnnotationTester.class;
     73       AnnotatedElement element = c.getMethod("calculateInterest"
     74                                     float.classfloat.class);      
     75       tester.printAnnotations(element, System.out);
     76     } catch (Exception e) {
     77       e.printStackTrace();
     78     } 
     79   }
     80 }
     81 
     82 class Sub extends Super {
     83 
     84   public void print(PrintStream out) throws IOException {
     85     out.println("Sub printing");
     86   }
     87 }
     88 
     89 @InProgress class Super {
     90 
     91   public void print(PrintStream out) throws IOException {
     92     out.println("Super printing");
     93   }
     94 }
     95 
     96 @Documented
     97 @Retention(RetentionPolicy.RUNTIME)
     98 @interface GroupTODO {
     99 
    100   public enum Severity { CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION };
    101 
    102   Severity severity() default Severity.IMPORTANT;
    103   String item();
    104   String assignedTo();
    105   String dateAssigned();
    106 }
    107 
    108 /**
    109  * Marker annotation to indicate that a method or class
    110  *   is still in progress.
    111  */
    112 @Documented
    113 @Inherited
    114 @Retention(RetentionPolicy.RUNTIME)
    115 @interface InProgress { }
    116 
    117 class AnnotationTester {
    118 
    119   @InProgress
    120   @GroupTODO(
    121     severity=GroupTODO.Severity.CRITICAL,
    122     item="Figure out the amount of interest per month",
    123     assignedTo="Brett McLaughlin",
    124     dateAssigned="04-26-2004"
    125   )
    126   public void calculateInterest(float amount, float rate) {
    127     // Need to finish this method later
    128   }
    129 }
    130 
    posted on 2010-01-04 11:28 sevenduan 閱讀(1651) 評(píng)論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 99无码人妻一区二区三区免费 | 成人免费区一区二区三区| 狼友av永久网站免费观看| 99热亚洲色精品国产88| 成熟女人特级毛片www免费| 亚洲av永久无码精品天堂久久| 亚洲黄色片免费看| 亚洲手机中文字幕| 四虎影视免费在线| 337p日本欧洲亚洲大胆人人 | 在线日韩日本国产亚洲| 青柠影视在线观看免费| 亚洲AV无码一区二区乱孑伦AS| 久久99精品免费视频| 亚洲av永久无码精品三区在线4 | AV在线亚洲男人的天堂| 久久www免费人成看国产片| 亚洲另类激情综合偷自拍| 国产情侣激情在线视频免费看| 亚洲一卡2卡3卡4卡乱码 在线| 日韩免费a级在线观看| 免费一区二区无码视频在线播放 | 久久久亚洲裙底偷窥综合| 在线看片韩国免费人成视频| 亚洲精品无码aⅴ中文字幕蜜桃| 成人伊人亚洲人综合网站222| 三级黄色免费观看| 亚洲一区二区三区免费视频| 免费国产精品视频| 久久免费看少妇高潮V片特黄| 亚洲依依成人精品| 亚洲AV无码一区二区三区国产| 国产精品免费看久久久| 亚洲熟妇AV一区二区三区宅男| 免费一级做a爰片性色毛片| 国产精成人品日日拍夜夜免费| 久久乐国产综合亚洲精品| 亚洲中文字幕无码不卡电影| 国产在线观看麻豆91精品免费| 七次郎成人免费线路视频| 亚洲国产成人久久|