JDK5.0新特性系列---9.注释功能Annotation

简介: import java.lang.annotation.ElementType; import java.lang.annotation.Target; import java.lang.annotation.

 

import java.lang.annotation.ElementType;

import java.lang.annotation.Target;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

/**关键技术

 * 1.Java常用的内置注释

 *     @Override放在方法的修饰符前,表示该方法覆盖了父类的同名同参数方法,如果该方法没有覆盖父 类的方法而使用了该注释,则编译器会报错

 *     @Deprecated放在变量和方法的访问修饰符前,表示该变量或者方法已经不推荐使用,通常是因为它很危险或者存在更好的选择。

 * 2.可以自定义注释类型,与enum定义枚举类型一样,使用@interface定义注释类型

 * 3. 能在自定义的注释中定义其它类、属性和方法。定义属性时,以属性名为方法名,以属性类型为方法的返回值类型,方法后接default关键字表示属性的默认值。如"String name();"表示该注释类型具有name属性,类型为String;"int age() default 20;"表示该注释具有age属性,类型为int,默认值为20.

 * 4. 可以在自定义的注释类型的声明中添加注释,即注释的元注释。Java2个常用的内置元注释:

 *    @Target指定Annotation类型可以应用的程序元素,程序元素的类型由java.lang.annotation.ElementType枚举类定义。如ElementType.METHOD表示该注释类型只能用于方法声明中。

 *    @RetentionJava编译器处理Annotation类型的方式有关,这些方式由java.lang.annotation.RetentionPolicy枚举值定义。如RetentionPolicy.RUNTIME表示该注释类型 将被编译成class文件

 *    @Document指明需要在Javadoc中包含注释(默认是不包含的)

 */

public class AnnotationData {

                   @Deprecated private String name;

                   public AnnotationData(String name){

                                      this.name = name;

                   }

                  

                   //方法声明中使用了内置的@Override元数据,表示该方法覆盖了父类的同名同参数方法

                   //如果父类不存在该方法,则编译不会通过

                   @Override public String toString(){

                                      return super.toString() + this.name;

                   }

                   @Override public int hashCode(){

                                      return toString().hashCode();

                   }

                  

                   /**方法中使用了内置的@Deprecated元数据,表示该方法已经不被推荐使用了*/

                   @Deprecated public String getName(){

                                      return name;

                   }

                   public String getAnnotationDataName(){

                                      return this.name;

                   }

 

                   //下面定义元数据类型

                   //使用@interface声明Annotation类型

                   public @interface MyAnnotation{

                                      //在元数据中可以定义其它类

                                      public enum Severity{

                                                         CRITICAL,IMPORTANT,TRIVIAL,DOCUMENT

                                      };

                                      //定义数据类型不需要定义gettersetter方法

                                      //只需要定义一个以成员名称命名的方法,并指定返回类型为需要的数据类型

                                      //default关键字为Annotation类型的成员设置默认值

                                      Severity severity() default Severity.IMPORTANT;

                                      String item();

                                      String assignedTo();

                                      String dateAssigned();

                   }

                   //使用自定义的Annotation类型,在使用时,

                   //如果Annotation类型在其他的包下,需要与使用类一样,import

                   @MyAnnotation(severity = MyAnnotation.Severity.CRITICAL,

                                                           item = "Must finish this method carefully",

                                                           assignedTo = "Programmer A",

                                                           dateAssigned = "2006/09/10")

                   public void doFunction(){

                                      //do something

                   }

                  

                   //下面再定义一个Annotation类型,使用了元数据的元数据

                   //@Retention(RetentionPolicy.RUNNTIME)这个meta-annotation

                   //表示了此类型的annotation将编译成class文件,而且还能被虚拟机读取

                   //@Target(ElementType.METHOD)表示此类型的annotation只能用于修饰方法声明

                   @Retention(RetentionPolicy.RUNTIME)

                   @Target(ElementType.METHOD)

                   public @interface MyNewAnnotation{

                                     

                   }

}

 

 

 

目录
相关文章
开源测试平台横向测评系列『流马』篇:流马使用及总结
【使用篇】 ● 接口测试:创建接口(添加引用公共参数、添加引用自定义参数)、测试用例(参数关联)、业务流程测试实践 ● web自动化测试:元素管理(添加元素)、测试用例(添加元素)、设计测试场景 ● 测试计划、测试集合与测试用例相互之间的关系 【总结篇】 ● 使用总结:常见的使用注意事项,如变量引用、函数引用、关联参数引用等 ● 优化建议:结合真实使用过程,从用户角度出发,提出的7条优化建议 ● 优缺点总结:优点、缺点、评分(从不同角度评测打分)
开源测试平台横向测评系列『流马』篇:流马使用及总结
|
前端开发 JavaScript 开发工具
React Native SDK for OSS
此文主要介绍 React Native SDK for OSS的方方面面,包括相关基本概念、项目背景、项目方案、环境搭建运行、使用姿势、注意事项等。文末的附件可运行Example Zip压缩包和针对新手的入门实用文章《从0开始搭建React Native for OSS项目》。
7506 0
|
存储 弹性计算 固态存储
2023阿里云服务器租用价格表(优惠报价和官方收费标准)
阿里云服务器租用价格表包括ECS共享型s6、通用算力型u1、计算型c6、计算型c7、通用型g6、通用型g7及GPU云服务器等,包括云服务器ECS实例CPU内存价格、公网带宽价格和系统盘收费标准
2698 0
2023阿里云服务器租用价格表(优惠报价和官方收费标准)
|
XML 开发框架 监控
Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
|
Web App开发 JavaScript 前端开发
开源硬件的前世今生
在互联网爆发式增长了几十年的今天,越来越多的末端硬件设备已经具备连接网络的能力,业态也越来越丰富,这就是今天所说的物联网。
1144 17
开源硬件的前世今生
|
缓存 资源调度 Kubernetes
PuTTy:PuTTy的简介、安装、使用方法之详细攻略
PuTTy:PuTTy的简介、安装、使用方法之详细攻略
PuTTy:PuTTy的简介、安装、使用方法之详细攻略
|
前端开发
html 空白汉字占位符
前端开发中,大家可能会遇到这样的问题:标题存在字数不一样的情况,但是产品大哥,让你要对齐。还必须对齐。他说他有强迫症
1388 0
|
自然语言处理 Java 人机交互
阿里云智能语音交互中一句话识别服务的简单使用
智能语音交互产品基于语音识别、语音合成、自然语言理解等技术,实现“能听、会说、懂你”式的智能人机交互体验,适用于智能客服、质检、会议纪要、实时字幕等多个企业应用场景,一句话识别服务可以对一分钟内的短语音进行识别,适用于对话聊天,控制口令等较短的语音识别场景,此篇文章将介绍此服务的简单使用
1464 0
阿里云智能语音交互中一句话识别服务的简单使用