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

  • 相关阅读:
    第01组 Beta冲刺(1/5)
    2019 SDN上机第6次作业
    2019 SDN上机第5次作业
    SDN课程阅读作业(2)
    USDT钱包对接交易所 寻找最便捷的USDT充提币API接口文档
    EOS区块链钱包开发教程
    XRP钱包对接教程
    usdt钱包如何跟交易所对接?
    BTC_ETH_USDT_自动充提币API接口,钱包对接交易所教程!
    BTC bitcoin-cli转账及交易的API使用教程
  • 原文地址:https://www.cnblogs.com/sunzhongyu008/p/11224907.html
Copyright © 2020-2023  润新知