• 【转】JAVA 注解示例


        注解(Annotation) 为我们在代码中天界信息提供了一种形式化的方法,是我们可以在稍后

    某个时刻方便地使用这些数据(通过 解析注解 来使用这些数据)。

        注解的语法比较简单,除了@符号的使用以外,它基本上与java的固有语法一致,java内置了三种

    注解,定义在java.lang包中。

          @Override 表示当前方法是覆盖父类的方法。

          @Deprecated 表示当前元素是不赞成使用的。

          @SuppressWarnings 表示关闭一些不当的编译器警告信息。

    下面是一个定义注解的实例

    Java代码
    package Test_annotation;  

    import java.lang.annotation.Documented;  
    import java.lang.annotation.Inherited;  
    import java.lang.annotation.Retention;  
    import java.lang.annotation.Target;  
    import java.lang.annotation.ElementType;  
    import java.lang.annotation.RetentionPolicy;  

    /*
    * 元注解@Target,@Retention,@Documented,@Inherited
    *  
    *     @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
    *         ElemenetType.CONSTRUCTOR 构造器声明
    *         ElemenetType.FIELD 域声明(包括 enum 实例)
    *         ElemenetType.LOCAL_VARIABLE 局部变量声明
    *         ElemenetType.METHOD 方法声明
    *         ElemenetType.PACKAGE 包声明
    *         ElemenetType.PARAMETER 参数声明
    *         ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
    *          
    *     @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
    *         RetentionPolicy.SOURCE 注解将被编译器丢弃
    *         RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
    *         RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
    *          
    *     @Documented 将此注解包含在 javadoc 中
    *      
    *     @Inherited 允许子类继承父类中的注解
    *    
    */
    @Target(ElementType.METHOD)  
    @Retention(RetentionPolicy.RUNTIME)  
    @Documented
    @Inherited
    /*
    * 定义注解 Test
    * 注解中含有两个元素 id 和 description
    * description 元素 有默认值 "no description"
    */
    public @interface Test {  
        public int id();  
        public String description() default "no description";  
    }
    package Test_annotation;

    import java.lang.annotation.Documented;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.RetentionPolicy;

    /*
    * 元注解@Target,@Retention,@Documented,@Inherited
    *
    *     @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
    *         ElemenetType.CONSTRUCTOR 构造器声明
    *         ElemenetType.FIELD 域声明(包括 enum 实例)
    *         ElemenetType.LOCAL_VARIABLE 局部变量声明
    *         ElemenetType.METHOD 方法声明
    *         ElemenetType.PACKAGE 包声明
    *         ElemenetType.PARAMETER 参数声明
    *         ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
    *        
    *     @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
    *         RetentionPolicy.SOURCE 注解将被编译器丢弃
    *         RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
    *         RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
    *        
    *     @Documented 将此注解包含在 javadoc 中
    *    
    *     @Inherited 允许子类继承父类中的注解
    *  
    */
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    /*
    * 定义注解 Test
    * 注解中含有两个元素 id 和 description
    * description 元素 有默认值 "no description"
    */
    public @interface Test {
    public int id();
    public String description() default "no description";
    }

       
    下面是一个使用注解 和 解析注解的实例

    Java代码
    package Test_annotation;  

    import java.lang.reflect.Method;  

    public class Test_1 {  
        /*
         * 被注解的三个方法
         */
        @Test(id = 1, description = "hello method_1")  
        public void method_1() {  
        }  

        @Test(id = 2)  
        public void method_2() {  
        }  

        @Test(id = 3, description = "last method")  
        public void method_3() {  
        }  

        /*
         * 解析注解,将Test_1类 所有被注解方法 的信息打印出来
         */
        public static void main(String[] args) {  
            Method[] methods = Test_1.class.getDeclaredMethods();  
            for (Method method : methods) {  
                /*
                 * 判断方法中是否有指定注解类型的注解
                 */
                boolean hasAnnotation = method.isAnnotationPresent(Test.class);  
                if (hasAnnotation) {  
                    /*
                     * 根据注解类型返回方法的指定类型注解
                     */
                    Test annotation = method.getAnnotation(Test.class);  
                    System.out.println("Test( method = " + method.getName()  
                            + " , id = " + annotation.id() + " , description = "
                            + annotation.description() + " )");  
                }  
            }  
        }  

    }
    package Test_annotation;

    import java.lang.reflect.Method;

    public class Test_1 {
    /*
    * 被注解的三个方法
    */
    @Test(id = 1, description = "hello method_1")
    public void method_1() {
    }

    @Test(id = 2)
    public void method_2() {
    }

    @Test(id = 3, description = "last method")
    public void method_3() {
    }

    /*
    * 解析注解,将Test_1类 所有被注解方法 的信息打印出来
    */
    public static void main(String[] args) {
       Method[] methods = Test_1.class.getDeclaredMethods();
       for (Method method : methods) {
        /*
        * 判断方法中是否有指定注解类型的注解
        */
        boolean hasAnnotation = method.isAnnotationPresent(Test.class);
        if (hasAnnotation) {
         /*
         * 根据注解类型返回方法的指定类型注解
         */
         Test annotation = method.getAnnotation(Test.class);
         System.out.println("Test( method = " + method.getName()
           + " , id = " + annotation.id() + " , description = "
           + annotation.description() + " )");
        }
       }
    }

    }

       
    输出结果如下:


        Test( method = method_1 , id = 1 , description = hello method_1 )
        Test( method = method_2 , id = 2 , description = no description )
        Test( method = method_3 , id = 3 , description = last method )

    转自:http://www.javaeye.com/topic/400085

  • 相关阅读:
    HTML5 文件上传
    Vue-Router模式、钩子
    网络基础协议随笔
    Vue-Router基础使用
    vue中mixin的一点理解
    纯css3跑马灯demo
    Charles使用笔记
    提个醒。。。
    本机未装Oracle数据库时Navicat for Oracle 报错:Cannot create oci environment 原因分析及解决方案
    easyUI datagrid 清空
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400143.html
Copyright © 2020-2023  润新知