zoukankan      html  css  js  c++  java
  • Annotation

       在进行类或方法定义的时候,都可以使用一系列的Annotation(public interface Annotation)进行声明,如果想要获取这些Annotation的信息,可以直接通过反射来完成。在 java.lang.reflect 里面有一个AccessibleObject类,在本类中提供有Annotation类的方法:

      1.获取全部Annotation:public Annotation[] getAnnotations();

      2.获取指定Annotation:public <T extends Annotation> T getAnnotation​(Class<T> annotationClass)

    package com.annotation.demo;
    
    import java.io.Serializable;
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Method;
    
    @FunctionalInterface
    @Deprecated(forRemoval = false,since = "1.1")
    interface IMessage{
        public void send(String msg);
    }
    
    @SuppressWarnings("serial")
    class MessageImpl implements IMessage,Serializable{
        @Override
        @Deprecated(since = "1.3")
        public void send(String msg) {
            System.out.println("【消息发送】" + msg);
        }
    }
    
    public class annotationdemo {
        public static void main(String[] args) throws Exception {
            {
                System.out.println("-----------------------IMessage接口:-----------------------------");
                Annotation annotations[] = IMessage.class.getAnnotations();//获取接口上的全部Annotation
                for(Annotation annotation:annotations){
                    System.out.println(annotation);
                }
            }
            
            {
                System.out.println("-----------------------MessageImpl子类:-----------------------------");
                Annotation annotations[] = MessageImpl.class.getAnnotations();//获取MessageImpl子类上的全部Annotation
                for(Annotation annotation:annotations){
                    System.out.println(annotation);
                }
            }
    
            {
                System.out.println("-----------------------send()方法:-----------------------------");
                Method method = MessageImpl.class.getDeclaredMethod("send", String.class);
                Annotation annotations[] = method.getAnnotations();//获取send方法上的全部Annotation
                for(Annotation annotation:annotations){
                    System.out.println(annotation);
                }
            }
        }
    }

    不同的Annotation有不同的作用范围:

    Annotation名称 作用范围                          
    @SuppressWarnings
     

    @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})

    @Retention(RetentionPolicy.SOURCE)

    public @interface SuppressWarnings {}

    @FunctionalInterface

    @Documented

    @Retention(RetentionPolicy.RUNTIME)

    @Target(ElementType.TYPE)

    public @interface FunctionalInterface {}

    @Deprecated
     @Documented

    @Retention(RetentionPolicy.RUNTIME)

    @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})

  • 相关阅读:
    css 网格布局简单应用
    服务器常用状态码
    js 操作数组
    下拉框 tree 基于 EasyUi
    c# 导出Excel
    select 多选 (EasyUI)
    如何提高sql查询速度
    总结JS中string、math、array的常用的方法
    php 验证邮箱 php验证手机号码 ph验证身份证
    jquery+php ajax上传多图片即时显示
  • 原文地址:https://www.cnblogs.com/sunzhongyu008/p/11224907.html
Copyright © 2011-2022 走看看