




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Annoion 在 java 的世界正铺天盖地展开,有空写这一篇简单的 annoions的文章,算是关于 Anno习.ion 入门的文章吧,希望能各位们能抛砖,共同学不讲废话了,实践才是硬道理.第一部分:了解一下 java1.5 起默认的三个 annoion 类型:一个是Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。一个是Deprecated:建议别人不要使用旧的 API 的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.一个是SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.如果不清楚上面三个类型的具体用法,各位可
2、以 baidu 或很简单的。一下的,第二部分:讲一下 annoion 的概念,再来讲一下怎样设计自己的annoion.首先在 jdk 自带的 java.lang.annoion 包里,打开如下几个源文件:1、源文件.java代码其中的类型定义为erface 是一个关键字,在设计 annoions 的时候必须把一个erface,而不能用 class 或erface 关键字(会不会觉得 sun有点,偏偏搞得与erface 这么像).2、源文件 Retention.java代码edRetention(RetentionPolicy.RUNTIME) (ElementType.ANNOION_TYPE
3、) public erfaceElementType value();看到这里,大家可能都模糊了,都不知道在说什么,别急,往下看一下.在上面的文件都用到了 RetentionPolicy,ElementType 这两个字段,你可能就会猜到这是两个 java 文件.的确,这两个文件的源代码如下:3、源文件 RetentionPolicy.java代码这是一个 enum 类型,共有三个值,分别是 SOURCE,CLASS 和 RUNTIME.SOURCE 代表的是这个 Anno如果经过了编译之后,Anno 的.class 文件里面。ion 类型的信息只会保留在程序源码里,源码ion 的数据就会,并
4、不会保留在编译好ClASS 的意思是这个 Annoion 类型的信息保留在程序源码里,同时也会保留在编译好的.class 文件里面,在执行的时候,并不会把这一些 信息加载到虚拟机(JVM)中去.注意一下,当你没有设定一个 Anno值时,系统默认值是 CLASS.ion 类型的 Retention第三个,是 RUNTIME,表示在源码、编译好的.class 文件中保留信息,在执行的时候会把这一些信息加载到 JVM 中去的举一个例子,如Override 里面的 Retention 设为 SOURCE,编译成功了就不要这一些检查的信息;相反,Deprecated 里面的 Retention 设为 R
5、UNTIME,表示除了在编译时会警告使用了哪个被 Deprecated 的方法,在执行的时候也可以查出该方法是否被 Deprecated.4、源文件 ElementType.java代码public enum RetentionPolicy SOURCE,CLASS, RUNTIMEedRetention(RetentionPolicy.RUNTIME) (ElementType.ANNOION_TYPE) public erface Retention RetentionPolicy value();里面的 ElementType 是用来指定 Annoion 类型可以用在哪一些元素上的.说明
6、一下:TYPE(类型), FIELD(属性), METHOD(方法), PARAMETER(参数), CONSTRUCTOR(构造函数),LOCAL_VARIABLE(局部变量),ANNOION_TYPE,PACKAGE(包),其中的 TYPE(类型)是指可以用在Class,erface,Enum 和 Annoion 类型上.另外,从 1 的源代码可以看出,自己也用了自己来自己,只能用在 ANNOION_TYPE 之上.如果一个 Annoion 类型没有指明使用在哪些元素上,那么它可以使用在任何元上,这里的元素指的是上面的八种类型.举几个正确的例子:具体参考一下 javadoc 文档上面一下
7、1 和 2 的源文件,它们都使用了ed,ed 的目的就是让这一个Annoion 类型的信息能够显示在javaAPI 说明文档上;没有添加的话,使用 javadoc 生成 API 文档的时候就会找不到这一个类型生成的信息.另外一点,如果需要把 Annoion 的数据继承给子类,那么就会用到Inherited 这一个 Annoion 类型.第三部分:下面讲的设计一个最简单的 Annoion 例子,这一例子共用四个文件;1、Description.java代码package l;import java.lang.annoion.ed; import java.lang.annoion.Element
8、Type; import java.lang.annoimport java.lang.annoion.RetentionPolicy; import java.lang.annoion.; (ElementType.METHOD) (value=ElementType.METHOD)(ElementType.METHementType.CONSTRUCTOR)public enum ElementType TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOION_TYPE,PACKAGE说明:所有的 Annoio
9、n 会自动继承 java.lang.annoion 这一个接口,所以不能再去继承别的类或是接口.最重要的一点,Annoion 类型里面的参数该怎么设定:第一,只能用 public 或默认(default)这两个value();这里把方法设为 defaul 默认类型.权修饰.例如,String第二,参数成员只能用基本类型byte,short,char,long,float,douboolean 八种基本数据类型和String,Enum,Class,annoions 等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为 String.第三,如果只有一个参数成员,
10、最好把参数名称设为value,后加小括号.例:上面的例子就只有一个参数成员.2、Name.java代码package l;import java.lang.annoion.ed; import java.lang.annoion.ElementType; import java.lang.annoion.Retention; import java.lang.annoion.RetentionPolicy; import java.lang.annoion.;/注意这里的与Description 里的不同,参数成员也不同 (ElementType.METHOD) Retention(Reten
11、tionPolicy.RUNTIME)edpublic erface Name String originate(); String community();(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) edpublic erface Description String value();3、JavaEyer.java代码4、最后,写一个可以运行提取 JavaEyer 信息的类 TestAnnoion代码package l;import java.lang.reflect.Method; import java.util.HashS
12、et;import java.util.Set;public class TestAnnoion /*author lighter说明:具体关天 Annoion 的 API 的用法请参见 javaDoc 文档*/public sic void main(String args) throws Exception String CLASS_NAME = l.JavaEyer; Class test = Class.forName(CLASS_NAME);Method method = test.getMethods();flag =AnnoionPresent(Description.class
13、); if(flag)package l;Description(javaeye,做最棒的开发交流社区) public class JavaEyer Name(originate=创始人:robbin,community=javaEye) public String getName()return null;Name(originate=创始人:江南白衣,community=springside) public String getName2()return 借用两位的 id 一用,写这一个例子,请见谅!;Description des = (Description)test.getAnnoion(Description.class);System.out.pr System.out.prln(描述:+des.value(); ln();/把 JavaEyer 这一类有利用到Name 的全部方法保存到 Set 中去Set set = new HashSet();for(i=0;imeth
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行政管理与组织优化策略试题及答案
- 2024年项目管理资格的考试技巧与策略试题及答案
- 证券从业资格证考试考试经验总结试题及答案
- 2025年国际金融理财师资格考试的准备计划和策略试题及答案
- 充分准备2025年证券从业资格证考试试题及答案
- 2024年项目管理流程分析试题及答案
- 2025年注会考试的法律知识重要性及试题及答案
- 2024园艺师考试模拟测试试题及答案
- 注册会计师的职业发展方向试题及答案
- 2024年项目管理专业人士资格认证试题及答案概述
- 贸易安全培训
- 中级消控证的试题及答案
- Unit 5 Everyone is special!(教学设计)-2024-2025学年人教版PEP(一起)(2024)英语一年级下册
- 2025年河南焦作市孟州市开创人才服务有限公司招聘笔试参考题库附带答案详解
- 2025年湖南永州恒通电力(集团)有限责任公司招聘笔试参考题库附带答案详解
- 2024新版人教PEP英语(2025春)七年级下册教学课件:Unit4 A 2a-2e
- 中医理疗技术
- 妇科护理人文关怀课件
- 《汽车专业英语》2024年课程标准(含课程思政设计)
- 小学数学二年级第二学期口算计算共3031道题
- 网络安全知识基础培训课件
评论
0/150
提交评论