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})

  • 相关阅读:
    JVM 的主要组成部分及其作用
    一天一个 Linux 命令(5):pwd命令
    算法-经典趣题-马踏棋盘(又称骑士周游)
    SAP HANA Schemas 和 HDI Containers
    如何手动下载并安装 Visual Studio Code 的 SAP Fiori tools
    一个最简单的 Github workflow 例子
    SAP UI5 初学者教程之七
    最近看的动漫和电影
    关于工作,干了这碗鸡汤
    啊啊啊啊啊啊
  • 原文地址:https://www.cnblogs.com/sunzhongyu008/p/11224907.html
Copyright © 2011-2022 走看看