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

  • 相关阅读:
    入门级: WinForm 下的 ComboBox,ListBox 的使用 (一)
    C#:谨慎 DateTime.Now 带来的危险
    HTML5 小游戏审核通过,请各位有兴趣的朋友帮忙投票!谢谢。
    基于fpga的单线激光雷达数据处理
    左右法则-复杂指针解析
    智能指针(auto_ptr和shared_ptr) 转
    iphone游戏引擎
    C++对象和内存
    让你的代码变的更加强大
    Class Loader
  • 原文地址:https://www.cnblogs.com/sunzhongyu008/p/11224907.html
Copyright © 2011-2022 走看看