Java注解--反射 你值得拥有 奇思妙想的注解

本文详细介绍了Java注解的用途,包括生成文档、编译时检查和替代配置文件功能。讲解了自定义注解的创建,以及JDK提供的元注解如Retention和Target的作用。同时,着重阐述了JDK8中引入的可重复注解和类型注解两大新特性,帮助开发者更好地理解和运用Java注解。
摘要由CSDN通过智能技术生成

Java奇思妙想的注解

希望本文可以帮助到你



前言

主要内容


提示:以下是本篇文章正文内容,下面案例可供参考

一、注解的理解

1.JDK5.0 新增的功能
2.Annotation(注解) 其实就是代码里的特殊标记,这些标 记可以在编译,类加载,运行时读取,并执行相应的处理。
3.作用:配置应用程序的一些配置时,减少遗留的冗余,繁琐代码和XML配置

框架 = 注解 + 反射机制 + 设计模式

二、注解的使用

1.示例

1.1 生成文档相关的注解

@author 表名该类模块的作者 多个作者,隔开
@version 表明该类板块的版本
@see 将后面的参数在javaDoc转为链接,进行跳转
@since 从哪个版本新增的
@param 对方法中某参数的说明 如果无参可以不写
@return 对方法返回值的说明 如果方法返回类型void可不写
@exception 对方法可能抛出的异常进行说明 如果方法没有throws显示抛出的异常就不能写其中

注意:
1.@see 后面跟包名.类名#方法名/成员属性
2.@param {变量类型} 变量名 变量说明

在这里插入图片描述

1.2在编译时进行格式检查(JDK内置基本注解) 了解即可

@Override:对于重写的方法进行的标识
在这里插入图片描述

@Deprecated:用于表示所修饰的元素(类、方法等)已过时,通常是因为所修饰的结构存在危险或存在更好的选择。
在这里插入图片描述

SuppressWarning:抑制编译器警告
在这里插入图片描述

1.3 跟踪代码依赖性,实现替代配置文件功能

在这里插入图片描述

2.自定义注解

定义新的Annotation类型使用**@interface关键字**
自定义注解自动继承了java.lang.annotation.Annotaion接口
成员变量以无参方法形式来定义
类型可以是八大基本数据类型以及引用数据类型+Annotation类型/enum类型等
如果只有一个参数成员,建议使用参数名value 使用时候也可以省略"value="
没有成员的注解称为标记,包含成员变量的注解称为元数据Annotation

在这里插入图片描述

三、元注解

1. 基本解释

元注解:对现有注解的解释说明

2. JDK提供的四种基本元注解

重点在于Retetion和Target
Retention:对于现有修饰的注解指定其声明周期

  • RetentionPolicy.SOURCE:只在源文件保留,编译时会自动丢弃
  • RetentionPolicy.CLASS(默认):在class文件保留,在运行时,JVM不会保留
  • RetentionPolicy.RUNTIME:在运行时有效,当运行时JVM会保留注释,程序可以通过反射获取该注释
    Target:表明所修饰的注解可以用在什么类型的结构上
    在这里插入图片描述
    Documented:用于指定修饰的注解的Annotation类被javadoc工具提取成文档,默认情况,javadoc是不包含注解的

注意:定义为Documented的注解必须设置Retention值为RUNTIME。不会该注解无法保留到运行时
@Inherited:被其修饰的注解具有继承性。吐过某个类使用了该修饰,则子类具有该注解

3.利用反射获取注解信息

在这里插入图片描述

四、JDK8中注解的新特性

4.1 可重复注解 重点

JDK8以前示例

//Test.java
@MyAnnotations({
@MyAnnotation(value = "hh")
,@MyAnnotation(value="1h")
})
public class My {
}

//MyAnnotations注解文件
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
public @interface MyAnnotations {

    MyAnnotation[] value();
}

// MyAnnotation注解文件
@Inherited
@Repeatable(MyAnnotations.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,TYPE_PARAMETER,TYPE_USE})
public @interface MyAnnotation {

    String value() default "hello";
}

JDK8示例

//在MyAnnotation注解文件上添加:@Repeatable(MyAnnotations.class) 可以重复注解

//Test.java 如下
@MyAnnotation(value = "hh")
@MyAnnotation(value="1h")
public class My {
}

4.2 类型注解 重点

使用了@Target注解下参数类型ElementType

TYPE_PARAMETER:表名该注解可以写在任何类型变量的声明语句中
TYPE_USE:表名该注解能写在任何类型的任何语句中

//MyAnnotation2
@Target({ElementType.TYPE_PARAMETER})
public @interface MyAnnotation2 {
    String value();
}

// test1.java
public class Test1<@MyAnnotation2() T> {}

//MyAnnotation3
@Target({ElementType.TYPE_USE})
public @interface MyAnnotation2 {
    String value();
}

//test2.java
// test1.java
public class Test1 {
    @MyAnnotation
    private String name;
    AnnotationTest<@MyAnnotation String> t = null;
    int a = (@MyAnnotation int) 2L    
}

总结

对于本文当中所描述的JDK自带的基本注解以及元注解了解即可,其余的作为补充,会用即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值