Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息。
java.lang.annotation Annotation接口是所有的Annotation都必须实现的接口。
系统内建的Annotation
在JDK1.5之后,系统中已经建立了如下的三个内建的Annotation类型,用户直接使用即可。
@Override:覆写的Annotation
@Deprecated:不赞成使用的Annotation
@SuppressWarnings:压制安全警告的Annotation
自定义Annotation
Annotation定义格式:
【public】 @interface Annotation名称{
数据类型 变量名称();
}
public @interface Meaning {
String value();
}
之后就直接可以在程序中使用@Meaning的格式
@Meaning(value="itmyhome")
class Demo{
}
可以在Annotation中设置一个参数,用来接收变量的内容,如上面的value,使用Annotation的时候也必须给参数赋值如:value="itmyhome"
既然可以设置一个参数,则同时也就可以设置多个参数。
public @interface Meaning {
String key();
String value();
}
此Annotation在使用的时候 需要设置两个参数,一个key一个value
@Meaning(key="hi",value="itmyhome")
class Demo{
}
也可以设置一个数组进去
public @interface Meaning {
String[] value();
}
接收的内容要传递数组
@Meaning(value={"hello","world"})
class Demo{
}
以上所定义的全部的Annotation中有一个特点,所有的参数内容需要在使用注释的时候设置上去,那么也可以为一个参数设置默认的内容,在声明的时候使用default即可。
public @interface Meaning {
String value() default ""; //默认为空
}
在使用的时候就可以不设置值
@Meaning
class Demo{
}
在操作中,对于一个Annotation而言有时候会固定期取值范围,只能取固定的几个值,这个时候实际上就需要依靠枚举。
public enum FormItemType { //定义枚举类型
hidden,text,select,date
}
定义Annotation
public @interface Meaning {
FormItemType value() ; //设置为枚举类型
}
Annotation的取值只能是枚举类型中的值
@Meaning(value=FormItemType.date)
class Demo{
}
Retention和RetentionPolicy
在Annotation中,可以使用Retention定义个Annotation的保存范围,此Annotation的定义如下:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Meaning {
FormItemType value() ; //设置为枚举类型
}
在以上的Retetion定义中存在了一个RetentionPolicy的变量,此变量用于指定Annotation的保存范围,RetentionPolicy包含三种范围
在三个范围中,最重要的就是RUNTIME范围,因为在执行的时候起作用。
内建Annotation的RetentionPolicy
三个内建的Annotation的定义:
Override定义采用的是@Retention(RetentionPolicy.SOURCE) 只能在源文件中出现
Deprecated定义采用的是@Retention(RetentionPolicy.RUNTIME),可以在执行时出现
SuppressWarnings定义采用的是@Retention(RetentionPolicy.SOURCE),只能在源文件中出现
一个Annotation如果要是想让其变得有意义,则必须结合反射机制取得Annotaion中设置的全部内容。
在Class类中存在以下几种与Annotation操作有关的方法
package com.itmyhome;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
class Demo{
@SuppressWarnings("unchecked")
@Deprecated
@Override
public String toString(){
return "hello";
}
}
public class T {
public static void main(String[] args) throws Exception{
Class<?> c = Class.forName("com.itmyhome.Demo");
Method mt = c.getMethod("toString"); //找到toString方法
Annotation an[] = mt.getAnnotations(); //取得全部的Annotation
for(Annotation a:an){
System.out.println(a);
}
}
}
此时已经取得了一个Annota。以上的操作实际上是通过三个系统内建的Annotation完成的,也可以自定义一个Annotation
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Meaning {
FormItemType value() ; //设置为枚举类型
}
package com.itmyhome;
import java.lang.reflect.Method;
class Demo{
@Meaning(value=FormItemType.select) //自定义Annotation
@SuppressWarnings("unchecked")
@Deprecated
@Override
public String toString(){
return "hello";
}
}
public class T {
public static void main(String[] args) throws Exception{
Class<?> c = Class.forName("com.itmyhome.Demo");
Method mt = c.getMethod("toString"); //找到toString方法
//指定的注释是否存在于此元素上
if(mt.isAnnotationPresent(Meaning.class)){
Meaning m = mt.getAnnotation(Meaning.class); //得到指定的Annotation
System.out.println(m.value()); //取得Annotation的值
}
}
}
@Target
指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制,如:@Target(ElementType.ANNOTATION_TYPE)
ElementType的保存范围
分享到:
相关推荐
尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 ...
Java 5 annotation 学习笔记Java 5 annotation 学习笔记Java 5 annotation 学习笔记
1. 前言 1-4 1.1. JAVA特点 1-4 1.2. 运行原理 1-4 1.3. JAVA目录 1-4 2. 一•基础知识 2-4 2.1. 配置环境 2-4 2.2. Java中基本概念 2...17.9. JAVA5.0 的注释 (Annotation) 17-73 17.10. Callable 和 Future接口 17-74
NULL 博文链接:https://whp0731.iteye.com/blog/354887
帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 main()方法 4 代码块 4 代码块使用注意事项和细节 5 单例模式 6 final...
本书内容非常全面,涵盖了《Java编程思想》、《Java学习笔记》等书籍所有知识要点,并结合作者自己经验总结而编写,内容丰富程度胜过一切书籍 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的...
Core Java学习笔记...........31 第一章 JAVA前言..31 第二章 标识符,关键字,类型........35 第三章 表达式与流控制....................41 第四章 数组.............50 第五章 对象和类(OO思想).........53 第...
javaAnnotation.doc java_xml_api.chm JAVA分页大全.txt JAVA设计模式.chm JAVA配置文件编写说明文档.pdf jboss.pdf log4j使用教程.txt struts_action.txt struts标签.chm swing02.doc Tomcat.chm webAndXml.pdf ...
├ annotation ├ callback ├ concurrent Java多线程编程核心技术 ├ crawler ├ data_structure 数据结构与算法分析_Java语言描述(第2版) ├ effective_java Effective Java 中文第二版 ├ jvm 深入理解...
Java学习笔记 台湾 林信良 什么是Java 从autoboxing、unboxing认识对象 语法入门 Annotation 文本编辑器 Java SE6新功能简介 继承、多型
java8 stream 源码 StudyNotes [TOC] Java Java编程思想 ...自己的Java学习笔记 为什么说HashMap是不安全的(即将开坑...) 什么是 APT(annotation processing tool) MARK 翻译 前端 Vue.js实战 HTTP 转载 JPA
─algorithms 算法 ├─database 数据库 ├─distributed 分布式系统 ├─framework 一些常用...├─spring-annotation spring注解驱动开发 ├─spring-batch ├─springboot-aop springaop使用以及aop应用 │ └─
000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...
Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...
Core Java学习笔记...........31 第一章 JAVA前言..31 第二章 标识符,关键字,类型........35 第三章 表达式与流控制....................41 第四章 数组.............50 第五章 对象和类(OO思想).........53 第...
JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。 先简单解释一下什么是Annotation,这个单词一般是翻译成元数据。元数据是什么?元数据就是描述数据的数据。也...
Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL ...
├─algorithms 算法│├─database 数据库 │├─distributed 分布式│├─java-advance 高级类库和jsr规范等 │├─java-basic Java基础 │├─mvc mvc框架 │├─orm orm框架 │├─spring-annotation spring注解...