Java注解:自定义注解(Annotation)

1、定义注解的关键字:@interface

定义Annotation使用的关键字是:@interface (在原有的interface前增加@符号)

**示例:**自定义的注解

package learn.demo.annotations;

/**
 * 这是自定义的一个简单的 annotation
 * */
public @interface MyAnnotation {
	// 
}

**使用:**使用自己定义的注解

	@MyAnnotation 
    public void testMyAnnotation(){
        System.out.println("测试自己定义的注解MyAnnotation");
    }

解释:
在上面的我们定义的Annotation可用于修饰类、接口、方法、成员属性等任何程序元素。

2、在自定的注解中添加属性

注解中我们也可以为注解设置一定的属性,例如我们可以在MyAnnoation注解中加入需要的属性(成员变量)

语法: 类型 属性名()
备注:这里的 () 是必须的

public @interface MyAnnotation {
	// 添加自己的属性
	String name();
	int age();
}

使用:

	@MyAnnotation(name = "kuyin",age = 18) 
    public void testMyAnnotation(){
        System.out.println("测试自己定义的注解MyAnnotation,带属性");
    }

3、提取Annotation的信息:

在Java中提供了java.lang.reflect.AnnotateElement接口,该接口代表程序中可以接受注释的程序元素,实现类有:

  • java.lang.reflect.Class:类定义
  • java.lang.reflect.Constructor: 构造器定义
  • java.lang.reflect.Field: 类的成员变量定义
  • java.lang.reflect.Method:类的方法定义
  • java.lang.reflect.Package:类的包定义

主要的方法:

  • Annotation[] getAnnotations():获取该程序元素上的所有注解
  • Annotation[] getDeclaredAnnotations():获取该程序元素上的所有运行时的注解
  • default boolean isAnnotationPresent(Class<? extends Annotation> annotationClass):判断该程序元素上是否包含指定类型的注解,存在返回true,否返回false
package learn.demo.annotations;

import org.junit.Test;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

@SuppressWarnings(value = "unchecked")
public class TestAnnotation {

    /**
     * 测试获取方法 testGetAnnotation() 上的注解
     * */
    @MyAnnotation
    @Deprecated
    @Test
    public void testGetAnnotation()throws Exception{
        Class<TestAnnotation> thisClass = TestAnnotation.class;
        Method testGetAnnotation = thisClass.getMethod("testGetAnnotation");
        Annotation[] annotations = testGetAnnotation.getDeclaredAnnotations();
        System.out.println("使用到的注解有"+annotations.length +"个:");
        for (Annotation an: annotations){
            System.out.println(an);
        }
    }

注意:上面的注解只能获取运行时存在的注解,如果不是的话,就无法获取到,如果时要获取到 @MyAnnotation 注解,需要将注解修改为:

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
	// ...
}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值