<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
    主站蜘蛛池模板: 亚洲成亚洲乱码一二三四区软件| 2020国产精品亚洲综合网| 91福利免费视频| 亚洲天堂2017无码中文| 国产一区二区视频免费| 中文字幕看片在线a免费| 4480yy私人影院亚洲| 国产大片91精品免费观看男同 | 亚洲日本中文字幕| 四虎成人免费观看在线网址 | 久久青草精品38国产免费| 67194在线午夜亚洲| 亚洲精品无码日韩国产不卡?V| 99re在线这里只有精品免费| 最新亚洲人成网站在线观看| 久久久久亚洲av无码专区 | 亚洲男人的天堂一区二区| 亚洲香蕉免费有线视频| 看全免费的一级毛片| 久久久国产精品亚洲一区| 四虎永久在线精品免费观看地址| 1a级毛片免费观看| 一个人晚上在线观看的免费视频| 亚洲视频在线观看网站| 亚洲国产成人久久综合野外| 久久笫一福利免费导航| 国产啪精品视频网站免费尤物| 亚洲精品乱码久久久久蜜桃| 亚洲av伊人久久综合密臀性色 | 亚洲综合久久成人69| 亚洲综合区小说区激情区| 毛片高清视频在线看免费观看| 国产三级在线免费观看| 亚洲成av人片在www鸭子| 久久亚洲精品成人无码网站| 国产亚洲精久久久久久无码AV| 成人免费午夜视频| 波多野结衣中文字幕免费视频| 久久精品视频免费| 国产精品黄页免费高清在线观看| 亚洲av无码成人精品区一本二本|