千家信息网

Java中如何设计自己的Annotation

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家分享的是有关Java中如何设计自己的Annotation的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。了解一下java1.5起默认的三个annotation类
千家信息网最后更新 2026年10月31日Java中如何设计自己的Annotation

这篇文章给大家分享的是有关Java中如何设计自己的Annotation的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

了解一下java1.5起默认的三个annotation类型:

一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。

一个是@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.

一个是@SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.

如果不清楚上面三个类型的具体用法,各位可以baidu或google一下的,很简单的。

第二部分:讲一下annotation的概念,再来讲一下怎样设计自己的annotation.

首先在jdk自带的java.lang.annotation包里,打开如下几个源文件:

1、源文件Target.java

代码

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

其中的@interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface,而不能用class或interface关键字(会不会觉得sun有点吝啬,偏偏搞得与interface这么像).

2、源文件Retention.java

代码

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

看到这里,大家可能都模糊了,都不知道在说什么,别急,往下看一下.

在上面的文件都用到了RetentionPolicy,ElementType这两个字段,你可能就会猜到这是两个java文件.的确,这两个文件的源代码如下:

3、源文件RetentionPolicy.java

代码

public enum RetentionPolicy {
 SOURCE,
 CLASS,
 RUNTIME
}

这是一个enum类型,共有三个值,分别是SOURCE,CLASS 和 RUNTIME.

SOURCE代表的是这个Annotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失,并不会保留在编译好的.class文件里面。

ClASS的意思是这个Annotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去.注意一下,当你没有设定一个Annotation类型的Retention值时,系统默认值是CLASS.

第三个,是RUNTIME,表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的.
  举一个例子,如@Override里面的Retention设为SOURCE,编译成功了就不要这一些检查的信息;相反,@Deprecated里面的Retention设为RUNTIME,表示除了在编译时会警告我们使用了哪个被Deprecated的方法,在执行的时候也可以查出该方法是否被Deprecated.

4、源文件ElementType.java

代码

public enum ElementType {
 TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR,
 LOCAL_VARIABLE, ANNOTATION_TYPE,PACKAGE
}

@Target里面的ElementType是用来指定Annotation类型可以用在哪一些元素上的.说明一下:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造函数),LOCAL_VARIABLE(局部变量), ANNOTATION_TYPE,PACKAGE(包),其中的TYPE(类型)是指可以用在Class,Interface,Enum和Annotation类型上.

另外,从1的源代码可以看出,@Target自己也用了自己来声明自己,只能用在ANNOTATION_TYPE之上.
如果一个Annotation类型没有指明@Target使用在哪些元素上,那么它可以使用在任何元素之上,这里的元素指的是上面的八种类型.

举几个正确的例子:

@Target(ElementType.METHOD)
@Target(value=ElementType.METHOD)
@Target(ElementType.METHOD,ElementType.CONSTRUCTOR)

具体参考一下javadoc文档

上面一下1和2的源文件,它们都使用了@Documented,@Documented的目的就是让这一个设计Annotation类型的信息能够显示在javaAPI说明文档上;没有添加的话,使用javadoc生成API文档的时候就会找不到这一个类型生成的信息.

另外一点,如果需要把Annotation的数据继承给子类,那么就会用到@Inherited这一个Annotation类型.

感谢各位的阅读!关于"Java中如何设计自己的Annotation"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

类型 信息 时候 编译 文件 源文件 设计 元素 方法 三个 代码 源码 两个 文档 程序 例子 关键 关键字 内容 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 为想互联网科技怎么样 科技赋能下的互联网金融 科技平台互联网 易互联网科技有限公司 奇酷互联网络科技 南京欣网互联网科技 碳银互联网科技有限公司 左右互联网络科技 华脉科技工业互联网产品 中国的互联网科技企业的崛起 福州新华互联网科技学校 知乎 随着互联网科技发展 欧洲十大科技互联网公司 新兴科技互联网创新大赛颁奖典礼 互联网科技扶贫时间 富国互联网金融科技混合基金 有人说阿里系是互联网科技企业 吉林省码上互联网科技电话 唯美互联网科技 互联网科技快速发展优美句子 互联网核心科技是什么 美国互联网科技 上海亿帐通互联网科技 上海电发互联网科技有限公司 以后互联网后是啥科技 用友工业互联网科技发展 科技赋能视角下互联网保险发展 上海同邻互联网科技有限公司规模 广西科技产业互联网是什么 广州全民伙伴互联网科技有限公司
0