自定义注解

注解的写法

@xxx

注解的位置

  • 类的上面
  • 类成员的上面(包括属性上面、方法上面、构造方法上面)
  • 参数前面

注解的作用

  • 小部分可用来做注释,为了说明某个属性或方法
  • 用来做代码的检查
  • 用来携带信息

自定义注解

步骤:

  • 创建一个注解(@interface)
  • 采用元注解来说明该注解可以放置的位置以及存在的作用域
  • 使用自定义注解

创建一个注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.CONSTRUCTOR,ElementType.METHOD,ElementType.FIELD})
//用@Target这个元注解来说明注解可以放置的位置,这里为构造函数,方法和属性上面
@Retention(RetentionPolicy.RUNTIME)
//用Retention这个元注解来描述这个注解可以存在内存中
public @interface MyAnnotion {
//@interface说明这是一个注解
 String[] value();
 //注解中的方法必须有返回值
}

使用自定义注解

public class Person {
 @MyAnnotion({"shanmu","jia"})
 private String name;
}

注意:

  • 将注解放在元素前,传递的参数要与注解类中的方法的返回值一致
  • 如果自定义的注解中只有一个方法,方法名是value,则可以省略方法名;如果方法是两个以上,每个方法必须写名字,例上面可表示为value={“shanmu”,“jia”}
  • 如果传递的信息是一个数组,数组内只有一个元素,可以省略“{}”

测试是否成功

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class TestMain {

 public static void mian(String[] args){
 
  try {
   //获得当前类的class
   Class clazz=Person.class;
   //获得类中的属性
   Field field=clazz.getDeclaredField("name");
   //获得属性上面的注解对象
   Annotation a=field.getAnnotation(MyAnnotion.class);
   //获取注解对象对应的class
   Class aclazz=a.getClass();
   //获得注解中的value方法
   Method amethod=aclazz.getMethod("value");
   //执行value方法,得到返回值
   String[] values=(String[])amethod.invoke(a);
   for(String value:values){
    System.out.println(value);
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值