java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解

四、如何对注释进行注释

这一节的题目读起来虽然有些绕口,但它所蕴涵的知识却对设计更强大的java程序有很大帮助。

在上一节讨论了自定义注释,由此我们可知注释在J2SE5.0中也和类、接口一样。是程序中的一个基本的组成部分。既然可以对类、接口进行注释,那么当然也可以对注释进行注释。

使用普通注释对注释进行注释的方法和对类、接口进行注释的方法一样。所不同的是,J2SE5.0为注释单独提供了4种注释。它们是Target、Retention、Documented和Inherited。下面就分别介绍这4种注释。

Target

这个注释理解起来非常简单。由于target的中文意思是“目标”,因此,我们可能已经猜到这个注释和某一些目标相关。那么这些目标是指什么呢?大家可以先看看下面的代码。

@Target(ElementType.METHOD)

@interface MyAnnotation {}

@MyAnnotation // 错误的使用

public class Class1

{

@MyAnnotation // 正确的使用

public void myMethod1() {}

}

以上代码定义了一个注释MyAnnotation和一个类Class1,并且使用MyAnnotation分别对Class1和myMethod1进行注释。如果编译这段代码是无法通过的。也许有些人感到惊讶,没错啊!但问题就出在@Target(ElementType.METHOD)上,由于Target使用了一个枚举类型属性,它的值是ElementType.METHOD。这就表明MyAnnotation只能为方法注释。而不能为其它的任何语言元素进行注释。因此,MyAnnotation自然也不能为Class1进行注释了。

说到这,大家可能已经基本明白了。原来target所指的目标就是java的语言元素。如类、接口、方法等。当然,Target还可以对其它的语言元素进行限制,如构造函数、字段、参数等。如只允许对方法和构造函数进行注释可以写成:

@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})

@interface MyAnnotation {}

Retention

既然可以自定义注释,当然也可以读取程序中的注释(如何读取注释将在下一节中讨论)。但是注释只有被保存在class文件中才可以被读出来。而Retention就是为设置注释是否保存在class文件中而存在的。下面的代码是Retention的详细用法。

@Retention(RetentionPolicy.SOURCE)

@interface MyAnnotation1 { }

@Retention(RetentionPolicy.CLASS)

@interface MyAnnotation2 {}

@Retention(RetentionPolicy.RUNTIME)

@interface MyAnnotation3 {}

其中第一段代码的作用是不将注释保存在class文件中,也就是说象“//”一样在编译时被过滤掉了。第二段代码的作用是只将注释保存在class文件中,而使用反射读取注释时忽略这些注释。第三段代码的作用是即将注释保存在class文件中,也可以通过反射读取注释。

Documented

这个注释和它的名子一样和文档有关。在默认的情况下在使用javadoc自动生成文档时,注释将被忽略掉。如果想在文档中也包含注释,必须使用Documented为文档注释。

@interface MyAnnotation{ }

@MyAnnotation

class Class1

{

public void myMethod() { }

}

使用javadoc为这段代码生成文档时并不将@MyAnnotation包含进去。生成的文档对Class1的描述如下:

class Class1extends java.lang.Object

而如果这样定义MyAnnotation将会出现另一个结果。

@Documented

@interface MyAnnotation {}

生成的文档:

@MyAnnotation // 这行是在加上@Documented后被加上的

class Class1extends java.lang.Object

Inherited

继承是java主要的特性之一。在类中的protected和public成员都将会被子类继承,但是父类的注释会不会被子类继承呢?很遗憾的告诉大家,在默认的情况下,父类的注释并不会被子类继承。如果要继承,就必须加上Inherited注释。

@Inherited

@interface MyAnnotation { }

@MyAnnotation

public class ParentClass {}

public class ChildClass extends ParentClass { }

在以上代码中ChildClass和ParentClass一样都已被MyAnnotation注释了。

五、如何使用反射读取注释

前面讨论了如何自定义注释。但是自定义了注释又有什么用呢?这个问题才是J2SE5.0提供注释的关键。自定义注释当然是要用的。那么如何用呢?解决这个问题就需要使用java最令人兴奋的功能之一:反射(reflect)。

在以前的JDK版本中,我们可以使用反射得到类的方法、方法的参数以及其它的类成员等信息。那么在J2SE5.0中同样也可以象方法一样得到注释的各种信息。

在使用反射之前必须使用import java.lang.reflect.* 来导入和反射相关的类。

如果要得到某一个类或接口的注释信息,可以使用如下代码:

Annotation annotation = TestAnnotation.class.getAnnotation(MyAnnotation.class);

如果要得到全部的注释信息可使用如下语句:

Annotation[] annotations = TestAnnotation.class.getAnnotations();

Annotation[] annotations = TestAnnotation.class.getDeclaredAnnotations();

getDeclaredAnnotations与getAnnotations类似,但它们不同的是getDeclaredAnnotations得到的是当前成员所有的注释,不包括继承的。而getAnnotations得到的是包括继承的所有注释。

如果要得到其它成员的注释,可先得到这个成员,然后再得到相应的注释。如得到myMethod的注释。

Method method = TestAnnotation.class.getMethod("myMethod", null);

Annotation annotation = method.getAnnotation(MyAnnotation.class);

注:要想使用反射得到注释信息,这个注释必须使用

@Retention(RetentionPolicy.RUNTIME)进行注释。

总结

注释是J2SE5.0提供的一项非常有趣的功能。它不但有趣,而且还非常有用。EJB3规范就是借助于注释实现的。这样将使EJB3在实现起来更简单,更人性化。还有Hibernate3除了使用传统的方法生成hibernate映射外,也可以使用注释来生成hibernate映射。总之,如果能将注释灵活应用到程序中,将会使你的程序更加简洁和强大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言再学习——分支结构

if语句是最简单的分之结构。 包含系统头文件用尖括号&#xff0c;但是包含自定义的头文件用双引号&#xff1b; #include<math.h>包含系统头文件 #include “lpj.h” 包含自定义头文件 goto语句在函数体内进行&#xff0c;跳转到其他地方。 do…while语句最少被执行一次。…

InceptionV2----Batch Normalization层

一、BN层的操作 1.BN层的操作位置&#xff1a;在非线性映射之前&#xff0c;目的是为了减少梯度消失和梯度爆炸。 1.对输入的x做归一化 2.增加2个参数&#xff0c;提高模型表达能力 3.理想情况下E和Var应该是针对整个数据集的&#xff0c;但显然这是不现实的。因此&#xff0c;…

Rsync命令详解

说明&#xff1a;Rsync是linux/Unix文件同步和传送工具。用于替代rcp的一个工具&#xff0c;rsync可以通过rsh或ssh使用&#xff0c;也能以daemon模式去运行&#xff0c;在以daemon方式运行时rsync server会开一个873端口&#xff0c;等待客户端去连接。连接时&#xff0c;rsyn…

java二次开发浏览器内核_深入理解基于Selenium的二次开发

对于做web端自动化测试的人来说&#xff0c;可能接触selenium比QTP还要多&#xff0c;但是我们在做基于selenium的二次开发的时候&#xff0c;经常会说到二次开发是 为了易于维护&#xff0c;很多人可能不懂得维护的价值是什么&#xff0c;和到底要维护什么。今天专门写一篇关于…

UVA 10600 ACM Contest and Blackout (次小生成树)

题目大意&#xff1a; 给n个节点&#xff0c;m条边&#xff0c;问最小生成树&#xff0c;次小生成树&#xff1f; ps&#xff1a;以前做次小生成树的时候估计没有掌握牢固&#xff0c;这次wa的好辛苦哟。 1 #include <cmath>2 #include <queue>3 #include <stri…

codeforces 234E Champions' League

传送门&#xff1a;http://codeforces.com/problemset/problem/234/E 题目大意&#xff1a;&#xff08;注意要用文件&#xff09;有n个队伍&#xff0c;每个队伍都有一个积分&#xff0c;按照积分高低顺序列出4个等级&#xff08;每个等级n/4个&#xff0c;所以n一定是4的倍数…

前端技术之_CSS详解第五天

前端技术之_CSS详解第五天 一、行高和字号 1.1 行高 CSS中&#xff0c;所有的行&#xff0c;都有行高。盒模型的padding&#xff0c;绝对不是直接作用在文字上的&#xff0c;而是作用在“行”上的。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu…

pxe装机dhcp获取不到_关于PXE服务器环境搭建流程中遇到的问题及解决方法

环境准备中遇到的问题首先需要将系统镜像挂载到 /mnt&#xff1a;#mount /dev/sdd2 /mnt/usb_disk 将U盘挂载#cp rhel-server-7.6-x86_64-dvd.iso /home 系统镜像拷到本地#mount -o loop rhel-server-7.6-x86_64-dvd.iso /mnt问题&#xff1a;ifconfig命令未找到解决&#xff1…

DB天气app冲刺二阶段第七天

又冲刺了一个礼拜了 今天收获应该算是不小了 虽然进度上来说还是一点也没前进 但是找到了好几个突破口 明天继续 今天先不多说了困了。。转载于:https://www.cnblogs.com/gaih/p/4550612.html

一小时包教会 —— webpack 入门指南

什么是 webpack&#xff1f; webpack是近期最火的一款模块加载器兼打包工具&#xff0c;它能把各种资源&#xff0c;例如JS&#xff08;含JSX&#xff09;、coffee、样式&#xff08;含less/sass&#xff09;、图片等都作为模块来使用和处理。 我们可以直接使用 require(XXX) 的…

判断一个js对象,是否具有某个属性

一个对象&#xff0c;想必我们关注的最多的应该是它上面的属性有哪些吧。那么&#xff0c;怎么判断一个对象是否具有某个属性呢&#xff1f; 1 /*下面是一个对比&#xff0c;看看在判断是否包括一个键上面&#xff0c;Object结构和Set结构的写法不同。*/2 // 对象的写法3 …

JAVA如何代码静态检查术语_Sonar代码静态检查规则-JAVA篇(二)

最近又搜罗整理了一些代码扫描规则&#xff0c;今天继续把这些扫描规则分享给老铁们&#xff0c;以后想学一些开发规则了&#xff0c;直接打开学一学就好了。不多说&#xff0c;直接上干货&#xff01;规则五、".equals()" should not be used to test the values of…

【每日scrum】NO.5

进入冲刺第五天&#xff0c;软件的界面设计成为主打&#xff0c;收集学校的很多美图是我们组的任务&#xff1b; 问题在于软件已很难有很大的改进&#xff0c;大方向也都是变不了的转载于:https://www.cnblogs.com/wantong/p/4553003.html

Python Dataframe转List

1 from pandas import read_csv2 3 dataframe read_csv(rurl, nrows 86400, usecols [0,], enginepython)4 #nrows:读取行数&#xff0c;usecols[n,]:仅读取第n列&#xff0c;usecols[a,b,c]:读取a、b、c列5 dataset dataframe.values6 7 List []8 for k in dataset: 9 …

使用/proc/meminfo文件查看内存状态信息

在Linux下可以使用/proc/meminfo文件查看操作系统内存的使用状态# cat /proc/meminfo MemTotal: 16333852 kB MemFree: 1633564 kB Buffers: 212448 kB Cached: 4422808 kB SwapCached: 0 kB Active: 10343096 kB Inactiv…

java 简单图片浏览器_Java实现简单的图片浏览器

第一次写博客&#xff0c;不喜勿喷。最近一个小师弟问我怎么用Java做图片浏览器&#xff0c;感觉好久没玩Java了&#xff0c;就自己动手做了一下。学校的教程是用Swing来做界面的&#xff0c;所以这里也用这个来讲。首先要做个大概的界面出来&#xff0c;eclipse有一个很好用的…

60. Spring Boot写后感【从零开始学Spring Boot】

从2016年4月15日到2016年7月20日经历长达3个月的时间&#xff0c;【从零开始学习Spring Boot】系列就要告一段落了。国内的各种资源都比较乱或者是copy 来copy去的&#xff0c;错了也不加以修正下&#xff0c;导致通过百度找到的资源可能都是错误的&#xff0c;正是由于这么一种…

五角星

import turtle turtle.setup(600,400,0,0) turtle.bgcolor(red) turtle.color(yellow) turtle.fillcolor(yellow) turtle.begin_fill() for i in range(5):turtle.forward(200)turtle.right(144) turtle.end_fill()turtle.done()转载于:https://www.cnblogs.com/Paris-YY/p/900…

java customerservlet_顾客管理系统java+servlet

首先我先搭好网页的框架先写一个登陆的html&#xff0c;名字是login.html1)在js中跳转页面的方法&#xff0c;我这里用的是get提交&#xff0c;只传递了一个name。function mylogin() {var usernamedocument.getElementById("name").value;window.location.href"…

php输出数据过大,PHPExcel导出数据量过大处理

转&#xff1a;ASP&period;NET MVC3 Model验证总结http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...C&plus;&plus; 我想这样用(六)嗯,上一篇已经介绍了面向过程编程的语法知识,接下来是最后的…