java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java中的注解、元注解

Java中的注解、元注解详细解析

作者:四叶草

这篇文章主要介绍了Java中的注解、元注解详细解析,注解也叫元数据,与类、接口、枚举是在同一个层次,它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释,需要的朋友可以参考下

1.注解概述

2.注解分类

作用分类:

注解可以根据注解参数分为三大类:

3.三种基本的Annotaton

3.1**@Override**

3.2**@Deprecated**

3.3**@SuppressWarnings**

unchecked:未检查的转化,如集合没有指定类型还添加元素
unused:未使用的变量
resource:有泛型未指定类型
path:在类路径,原文件路径中有不存在的路径
deprecation:使用了某些不赞成使用的类和方法
fallthrough:switch语句执行到底没有break关键字
rawtypes:没有写泛型,比如: List list = new ArrayList();
all:全部类型的警告

4.元注解(重点)

四种元注解:

4.1**@Documented**

4.2@Retention

只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留多长时间,@Rentention 包含一个 RetentionPolicy 类型的成员变量, 使用 @Rentention 时必须为该 value 成员变量指定值(值有三种)。

三种值

注意: 我们常用的定义即是RetentionPolicy.RUNTIME,因为我们使用反射来实现的时候是需要从JVM中获取class类对象并操作类对象的。

三个生命周期是 源码阶段 - > class类对象阶段 - > Runtime运行时阶段

4.3**@Target**

用于修饰注解的注解,用于指定被修饰的注解能用于修饰哪些程序元素。@Target也包含一个名为value的成员变量。

ANNOTATION_TYPE 用于描述注解
CONSTRUCTOR 用于描述构造方法
FIELD 用于描述属性
LOCAL_VARIABLE 用于描述局部变量
METHOD 用于描述方法
PACKAGE 用于描述包
PARAMETER 用于描述方法内的参数
TYPE 用于描述类型进行注解,比如类、接口、枚举

4.4**@Inherited**

被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解。

5.自定义注解

格式:public @Interface 注解名 {

属性列表/无属性

}

注解体中的属性要求(返回值类型):

1、基本数据类型

2、String类型

3、枚举类型

4、注解

5、以上类型的数组

注解的属性也叫做成员变量。注解只有成员变量,没有方法。

注意:

6.注解的提取

注解通过反射获取。首先可以通过 Class 对象的 isAnnotationPresent() 方法判断它是否应用了某个注解

public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {}

然后通过 getAnnotation() 方法来获取 Annotation 对象,或者是 getAnnotations() 方法。。

public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {}

public Annotation[] getAnnotations() {}

//前一种方法返回指定类型的注解,后一种方法返回注解到这个元素上的所有注解。

如果获取到的 Annotation 如果不为 null,则就可以调用它们的属性方法了。比如

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
 
    public int id() default -1;
 
    public String msg() default "Hi"; 
    
}
//TestAnnotation 中 id 属性默认值为 -1,msg 属性默认值为 Hi
//因为有默认值,所以无需要再在 @TestAnnotation 后面的括号里面进行赋值了,这一步可以省略
@TestAnnotation()
public class Test {
 
    public static void main(String[] args) {
 
        boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class);
 
        if ( hasAnnotation ) {
            TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);
 
            System.out.println("id:"+testAnnotation.id());
            System.out.println("msg:"+testAnnotation.msg());
        }
 
    }
 
}

到此这篇关于Java中的注解、元注解详细解析的文章就介绍到这了,更多相关Java中的注解、元注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文