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自带的基本注解以及元注解了解即可,其余的作为补充,会用即可