注解的反射,以及常见内置注解,反射注解

约定不等于承诺〃 2023-07-07 11:18 62阅读 0赞

注解的反射,以及常见内置注解

注解的目的:

  • 在编写程序过程中,我们会编写注释,但是注释在程序运行过程中,注释是不会显示的,但是使用注解后,程序运行的过程中也会显示出来

自定义注解:

语法结构:
public @interface MyAnnotation{

}
使用时,直接@MyAnnotation

自定义注释成员属性
语法结构:
public @interface MyAnnotation{
String value();String成员变量,value成员名字 后面必须加括号
Class type();
}
使用时,@MyAnnotation(value=“xxx”,type = Object.class)

如果嫌麻烦的话可以使用成员属性默认值
语法结构:
public @interface MyAnnotation{
String value()default “默认值”;
Class type()default void.class;
}
使用时直接 @MyAnnotation

  1. @MyAnnotation(type = Object.class, value = "XXX")//自定义注释
  2. @MyAnnotation

常见内置注解

首先解释一下元注解:元注解就是其他注解的注解(就是一个注释的注释)
1.@Decumented 指示某一类型的注解通过 java doc 和类似默认工具进行文档化
2.@Inherited 指示注释类型被自动继承
3.@Retention 指示注释类型的注释要保留多久
4.@Target 指示注释类型所适用的程序元素的种类
主要掌握后两种
1.Retention:
适用的枚举:RetentionPolicy
1.SOURCE :不编译Annotation到类文件中
2.CLASS :编译Annotation到类文件中,运行时不加载
3.RUNTIME :在运行时加载到JVM中

2.Target
适用的枚举:ElementPolicy
1.ANNOTATION_TYPE :用于Annotation类型
2.TYPE :用于类,接口和枚举,以及Annotation类型
3.CONSTRUCTOR :用于构造方法
4.FIELD :用于成员变量和枚举常量(常用)
5.METHOD :用于方法(常用)
6.PARAMETER :用于参数
7.LOCAL_VARIABLE :用于局部变量
8.PACKAGE :用于包

反射注解:

Constructor(构造方法类)
Field(成员属性类)
Method(成员方法类)
这三个类都提供了三个方法
1.isAnnotationPresent(Class annotationClass) 查看是否添加了指定类型的annotation 有则ture
2.getAnnotation(Class annotationClass) 用来获取指定类型的annotation 不存在则null
3.getParameterAnnotations() 获取所有的注解的数组(将所有注解都返回出来,形成一个数组
注意:如果要返回类中的注解,有一个前提:@Retention(RetentionPolicy.RUNTIME)在运行时加载到JVM中

实例:
**主函数:**

  1. public class 反射注解 {
  2. @MyAnnotation02(remark="手机品牌")
  3. public String phone;//手机品牌
  4. @MyAnnotation02(remark="手机价格")
  5. public double price;//手机价格
  6. @Deprecated//注解停用
  7. @MyAnnotation02(remark="电池型号",inable=false)//注解不启用
  8. public String batter;//电池型号
  9. @MyAnnotation02(remark="手机厂商")
  10. public String proudced;//手机厂商
  11. }
  12. **注解部分**
  13. import java.lang.annotation.ElementType;
  14. import java.lang.annotation.Retention;
  15. import java.lang.annotation.RetentionPolicy;
  16. import java.lang.annotation.Target;
  17. @Target(ElementType.FIELD)//此注解只可以用于成员属性上
  18. @Retention(RetentionPolicy.RUNTIME)//反射的前提条件,此注解可以被反射
  19. public @interface MyAnnotation02 {
  20. String remark() default "";
  21. boolean inable() default true;
  22. }

反射部分
import java.lang.reflect.Field;

//反射注解,具体操作

  1. public class demo {
  2. public static void main(String[] args) {
  3. Class c = 反射注解.class;
  4. Field fs[] = c.getDeclaredFields();//获取所有的属性
  5. for(Field f :fs) {
  6. if(f.isAnnotationPresent(MyAnnotation02.class));{ //查看是否添加指定类型的注解,有就返回ture
  7. // System.out.println(f.getName()+"被注解过");
  8. MyAnnotation02 p =f.getAnnotation(MyAnnotation02.class);//获取MyAnnotation02的对象
  9. System.out.print(f.getName()+"注解的内容");
  10. System.out.print("备注:"+p.remark());//获取注解内容
  11. System.out.println("属性是否有效:"+p.inable());//获取注解是否有效
  12. }
  13. }
  14. }
  15. }

结果如下:
phone注解的内容备注:手机品牌属性是否有效:true
price注解的内容备注:手机价格属性是否有效:true
batter注解的内容备注:电池型号属性是否有效:false
proudced注解的内容备注:手机厂商属性是否有效:true

发表评论

表情:
评论列表 (有 0 条评论,62人围观)

还没有评论,来说两句吧...

相关阅读

    相关 注解反射

    注解(Annotation)是Java中的一种元数据,它提供了一种为程序元素(类、方法、变量等)添加元数据的方式。注解可以用来描述程序元素的特性、用途和约束条件等信息。Java

    相关 注解反射

    注解(Annotation)是Java中的一种元数据,它提供了一种为程序元素(类、方法、变量等)添加元数据的方式。注解可以用来描述程序元素的特性、用途和约束条件等信息。Java

    相关 反射注解

    反射与注解 一、反射 1. 使用反射机制可以动态的获取当前class的信息,比如方法的信息、注解信息、方法的参数、属性 2. 反射目的:方便开发者对框架的拓展,

    相关 反射&注解

    今日目标 1. 获得字节码对象的三种方式 2. 能够使用反射操作构造方法,变量,方法 3. 能够获取自定义注解的变量值 4. 能够自定义注解 1.反射 1.