本站消息

站长简介/公众号


站长简介:逗比程序员,理工宅男,前每日优鲜python全栈开发工程师,利用周末时间开发出本站,欢迎关注我的微信公众号:幽默盒子,一个专注于搞笑,分享快乐的公众号

  价值13000svip视频教程,java大神匠心打造,零基础java开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2021-05(14)

2021-06(58)

2021-07(10)

Java注解(二)

发布于2021-06-12 14:06     阅读(853)     评论(0)     点赞(14)     收藏(0)


       上篇文章简单的介绍了注解的2个基本属性;

  • 1.在什么地方使用注解(由@target来决定);
  • 2.注解保留到什么时候(由@Retention决定);

       了解了这2个基础的属性,加一点反射的知识就可以自定义一个简单的注解;这篇文章主要是介绍一下注解的另一些简单的东西:元注解,自定义注解@interface

元注解

       用于注解 自定义注解 的注解。

  • @Target
  • @Retention
  • @Inherited
  • @Documented
  • @Repeatable (java1.8 新增)

@Target

指定注解的位置;target的值是一个数组类型,也就是说可以定义多个值;有多个值时,用{},每个值之间使用",";只有一个值时可以不用{}

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    /**
     * Returns an array of the kinds of elements an annotation type
     * can be applied to.
     * @return an array of the kinds of elements an annotation type
     * can be applied to
     */
    ElementType[] value();
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.TYPE})
public @interface MyAnno {

    boolean NOTNULL() default false;
    
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyAnno {

    boolean NOTNULL() default false;
    
}

@Retention

注解保留到什么时候,是定义注解的生命周期;

@Documented

注解使用了@Documented的注解,在用过该注解的类中,用javadoc命令生成API文档后idea生成doc文档,文档中会显示注解信息;有点绕,下面直接看图;
自定义注解类使用:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Documented
public @interface MyAnno {
    boolean NOTNULL() default false;
}

用了@MyAnno 的类AnnoTest

public class AnnoTest {
   @MyAnno(NOTNULL = true)
   public String name;
    @MyAnno
   public String id;
    @MyAnno(NOTNULL = true)
    public int number;
}

AnnoTest 生成的javadoc文档,自定义注解MyAnno使用@Documented和不使用@Documented的对比
在这里插入图片描述
在这里插入图片描述

@Inherited

继承性,当自定义注解注解@MyAnno使用了@Inherited ,使用过@MyAnno注解的类:Father,其子类Son可以获取到@MyAnno的信息;

@Repeatable

可重复注解;什么意思呢?如果没有该注解,同一个地方不能重复出现2次及以上的该注解;


   @MyAnno(NOTNULL = true)
   @MyAnno(NOTNULL = true)
   public String name;
如果MyAnno没有@Repeatable,这种写法就会报错,
在MyAnno上添加@Repeatable,这种写法就不会报错;

自定义注解

注解的本质其实是一个Annotation接口,所有的注解类都会继承这个接口;
也就是说注解中其实是可以有属性和方法,但是接口中的属性都是static final的,对于注解来说没什么意义,而我们定义接口的方法就相当于注解的属性;这也是为什么注解变量会有括号;

注解的属性类型:

  • 1.基本类型
  • 2.String
  • 3.enum枚举
  • 4.Class类型
  • 5.注解
  • 6.以上类型的一维数组

原文链接:https://blog.csdn.net/m0_37550986/article/details/117751965



所属网站分类: 技术文章 > 博客

作者:快起来搬砖啦

链接:http://www.javaheidong.com/blog/article/222026/5b323ae0333fce3a661a/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

14 0
收藏该文
已收藏

评论内容:(最多支持255个字符)