码迷,mamicode.com
首页 > 其他好文 > 详细

简单自定义Annotation和利用反射获取注解中的值

时间:2021-06-28 21:19:24      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:cti   rgba   sof   编译   microsoft   枚举类   except   void   png   

用一个简单例子,做一下自定义注解:

 

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
 * 
 *
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation
{
    public String hello() default "lzyer";
  
    public String world();
}

 

Retention:表示注解保留时间和注释类型是否被保留,如果没有Retention注解的声明,是默认的RetentionPolicy.CLASS.

从API文档中可以知道RententionPolicy是枚举类型,取值可以为CLASS,RUNTIME,SOURCE.

CLASS:表示的是这种注解在编译时,会保存在.class文件中,JVM在运行时不会被保存

RUNTIME:表示在编译时这种注解会保存在.class文件中,在运行时保存在JVM中,因此可以通过反射的方式调用。

SOURCE:表示在编译的时候该注解会被丢弃。

测试类:

@MyAnnotation(hello = "beijing", world = "shanghai")
public class MyTest
{
    @MyAnnotation(hello="hunan", world="changsha")
    @Deprecated
    @SuppressWarnings("unchecked")
    public void print()
    {
        System.out.println("hello world");
    }
}

反射测试类:

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
 
public class Myflection
{
    public static void main(String[] args)throws Exception
    {
        MyTest myTest = new MyTest();
        
        Class<MyTest> classType = MyTest.class;
        
        Method method = classType.getMethod("print", new Class[]{});
        //查看某个方法是否存在该注解
         if(method.isAnnotationPresent(MyAnnotation.class))
         {
             MyAnnotation myAnnotation =  method.getAnnotation(MyAnnotation.class);
             String hello = myAnnotation.hello();
             String world = myAnnotation.world();
             System.out.println(hello +", " +world);
         }
         //得到方法的所有注解,并遍历
         Annotation[] annotations =  method.getAnnotations();
         for(Annotation a : annotations)
         {
             System.out.println(a);
         }
    }
}

结果:

技术图片

 

简单自定义Annotation和利用反射获取注解中的值

标签:cti   rgba   sof   编译   microsoft   枚举类   except   void   png   

原文地址:https://www.cnblogs.com/shuilangyizu/p/14944892.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!