Java注解

Posted 浴盆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java注解相关的知识,希望对你有一定的参考价值。

元注解

元注解是可以注解到注解上的注解:

  • @Retention当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间。它的取值如下: RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。 RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。 RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
  • @Documented。能够将注解中的元素包含到 Javadoc 中去。
  • @Target。@Target 指定了注解运用的地方。ElementType.ANNOTATION_TYPE 可以给一个注解进行注解。ElementType.CONSTRUCTOR 可以给构造方法进行注解。ElementType.FIELD 可以给属性进行注解。
  • @Inherited单独解释下
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface Test 

@Test
public class A 
public class B extends A 

注解 Test 被 @Inherited 修饰,之后类 A 被 Test 注解,类 B 继承 A,类 B 也拥有 Test 这个注解。

成员变量

注解的属性也叫做成员变量。注解只有成员变量,没有方法。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation 
    int id();
    String msg();

@TestAnnotation(id=3, msg="hello annotation")
public class Test 

注解与反射

注解通过反射获取。首先可以通过 Class 对象的 isAnnotationPresent() 方法判断它是否应用了某个注解。如果获取到的 Annotation 如果不为 null,则就可以调用它们的属性方法了。比如

@TestAnnotation()
public class Test 
    public static void main(String[] args) 
    	// 通过反射
        boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class);
        if ( hasAnnotation ) 
            TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);
            System.out.println("id:"+testAnnotation.id());
            System.out.println("msg:"+testAnnotation.msg());
        

    

获取方法上的注解,同样是借助反射

			Method testMethod = Test.class.getDeclaredMethod("testMethod");
            if ( testMethod != null ) 
                // 获取方法中的注解
                Annotation[] ans = testMethod.getAnnotations();
                for( int i = 0;i < ans.length;i++) 
                    System.out.println("method testMethod annotation:"+ans[i].annotationType().getSimpleName());
                
            

以上是关于Java注解的主要内容,如果未能解决你的问题,请参考以下文章

java注解的参数没有被赋值

java注解

Android APT注解处理器 ( 配置注解依赖支持的注解类型Java 版本支持 )

Java注解教程及自定义注解

java注解是怎么实现的?

Java 注解自定义注解 ( 使用注解实现简单测试框架 )