栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

b站学习遇见狂神说--注解2

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

b站学习遇见狂神说--注解2

元注解(mate-annotation)

元注解的作用是负责解释注解的其他注解,Java中定义了4个标准的元注解(mate-annotation)类型,它们被用来提供对其他的注解(annotation)的类型做以说明.
这些类型和它们所支持的类都能在java.lang.annotation包中可以找到,它们分别是(@Target,@Retention,@documented,@Inherited).
1.@Target:用于描述注解的使用范围,就是被描述的注解可以用在什么地方.

2.@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期.(SOURCE(源代码)

3.@documented:说明该注解将被包含在javadoc中,就是是否生成文档注释.

4.@Inherited(继承):说明子类可以继承父类的该注解.

好了,说了那么多,让我们来自定义一个元注解吧.

package com.ffyc.kuang.annotation;

import java.lang.annotation.*;

//自定义一个元注解

public class Annotationtext2 {
    //这里看到我们定义的注解是没有问题的,程序没有报错.
    @MyAnnotation
    public void test() {

    }


}

//首先让我们定义一个注解:
//@Target表示我们的注解可以用在那些地方.
//value里面的值都已经定义好了,我们只需要选择想要的就可以,这里我们选择的是METHOD(方法),表示该注解只能在方法中运行,当我们在其他地方使用该注解,程序会报错
//这里的ElementType是一个数组,当我们需要传多个值时,我们就可以用value = [ElementType.METHOD,ElementType.(参数值1),,ElementType.(参数值2)];
@Target(value = ElementType.METHOD)
//Retention 表示我们的注解在什么地方还有效
//这里的RetentionPolicy是一个数组,它里面只有3个值:SOURCE,CLASS,RUNTIME.其中SOURCE 

最后,我们再说一下@Target,@Retention中的value的参数,首先让我们看看源码:
1.我们先来看看@Target源码:

@documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    
    ElementType[] value();
}

这里我们就可以看到,在@Target中我们要传入的value是一个ElementType数组.
让我们在看看ElementType[ ]的源码:

public enum ElementType {
    
    TYPE,

    
    FIELD,

    
    METHOD,

    
    PARAMETER,

    
    CONSTRUCTOR,

    
    LOCAL_VARIABLE,

    
    ANNOTATION_TYPE,

    
    PACKAGE,

    
    TYPE_PARAMETER,

    
    TYPE_USE
}

在这里我们可以知道ElementType数组中定义了有10个元素,它们的意思我们也可根据它们的名字很容易理解,所以我们到时候需要什么值就传入对应的元素就行了.

2.我们在来看看@Retention源码:

@documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    
    RetentionPolicy value();
}

这里我们就可以看到,在@Retention中我们要传入的value是一个RetentionPolicy数组.
让我们在看看RetentionPolicy[ ]的源码:

public enum RetentionPolicy {
    
    SOURCE,

    
    CLASS,

    
    RUNTIME
}

RetentionPolicy数组中定义了只有3个元素,它们分别是SOURCE,CLASS,RUNTIME,在这里我需要说明一下它们的关系SOURCE 当我们传入的value值是RUNTIME时,它们也会默认包括了SOURCE,CLASS.所以这里的value只能传一个数.
当我们知道这一点是,我们到时候需要什么值就传入对应的元素就行了.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/425262.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号