JDK1.6 java.lang.reflect 接口 AnnotatedElement探究

这个接口的主要作用就是找出类上标注的注解和注解的名称。

此接口在1.6中有四个方法,(1.8中又添加了几个方法,都差不多)

<T extends Annotation>  T  getAnnotation(Class<T> annotationClass) 

         如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。 

Annotation[] getAnnotations() 

         返回此元素上存在的所有注释。 

Annotation[] getDeclaredAnnotations() 

         返回直接存在于此元素上的所有注释。 

boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 

         如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。 

以下通过示例解释

  1. 先定义自定义注解,如果对自定义注解不了解请点击深入理解Java:注解(Annotation)自定义注解入门

  2. 写main方法测试

Controller注解类

package com.hldh.test;

import java.lang.annotation.*;

/**
 * Created by liuhj on 2015/11/16.
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Controller {
    String value() default "index";
}

然后写测试类MainTest.java

package com.hldh.test;

import java.lang.annotation.Annotation;

/**
 * Created by liuhj on 2015/11/16.
 * 测试查找自定义注解
 */
public class MainTest {
    public static void main(String args[]){
        try{
            //加载一个包含注解的类
            Class<?> clazz = Class.forName("com.hldh.test.IndexController");
            
            //判断是否有某类型的注解,如果有,返回注解,没有返回空
            Controller controller = clazz.getAnnotation(Controller.class);
            System.out.println(controller);    //@com.hldh.test.Controller(value=index)
            System.out.println(controller.value());     //返回controller注解的默认值  index
            
            //返回此元素上存在的所有注释。
            Annotation[]  a = clazz.getAnnotations();
            for(Annotation annotation :a){
                System.out.println(annotation);     //@com.hldh.test.Controller(value=index ) @com.hldh.test.RequestMapping(value=name)
            }
            
            //是否有指定类型的注解存在于类上
            System.out.println(clazz.isAnnotationPresent(Controller.class));        //true 包含controller注解
            
            //获得直接作用于此类的注解,继承的注解得不到
            Annotation[] a1 = clazz.getDeclaredAnnotations();
            for(Annotation annotation :a1){
                System.out.println(annotation);    //@com.hldh.test.Controller(value=index ) @com.hldh.test.RequestMapping(value=name)
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}


第四个方法获取直接作用于此类的注解,这里面涉及了注解的继承,参考子类可以继承到父类上的注解吗--有结论了


转载于:https://my.oschina.net/u/2519530/blog/530856

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值