JAVA进阶-注解
注解元数据分为4部分分别为Target,Documented,Inherited,Retention:
Target>指定被注解的注解仅仅能使用在某个类型上;ElementType指定其类型:能够为方法
字段,类,返回值等等;
声明:
/**
* @author Lean @date:2014-10-13
*/
@Target(ElementType.METHOD)
public @interface WorkInProgress {}
应用:
/**
* @author Lean @date:2014-10-13
*/
public class AnnotationSample { //当在字段中使用时:The annotation @WorkInProgress is disallowed for this location
//@WorkInProgress
private int age; @WorkInProgress
public static boolean doSomeThing() {
// TODO Auto-generated method stub
return false;
} }
Retention>设置注解可见性;使用到RetentionPolicy枚举
RetentionPolicy.SOURCE>>编译器可见,但对.class文件和执行时不可见;
RetentionPolicy.CLASS>>默认工具可见,对.class文件可见,但执行不可见;
RetentionPolicy.RUNTIME>>执行时可见;不会被.class文件所知,在执行时告诉JVM的值;
下面样例为执行时内省检查,当一个元注解须要多个限定值的时,必须使用{}和逗号隔开,
如@Target({ElementType.METHOD,ElementType.TYPE})
/**
* @author Lean @date:2014-10-13
*/
@WorkInProgress
public class AnnotationSample { private int age; @WorkInProgress
public static boolean doSomeThing() {
// TODO Auto-generated method stub
return false;
} public static void main(String[] args) {
AnnotationSample obj=new AnnotationSample();
Class clazz=obj.getClass();
WorkInProgress progress=(WorkInProgress) clazz.getAnnotation(WorkInProgress.class);
System.out.println(clazz.getName());
if (clazz.isAnnotationPresent(WorkInProgress.class)) {
System.out.println("class Annotationed WorkInProgress!");
}
Method[] methods=clazz.getMethods();
for (Method method : methods) {
if (method.isAnnotationPresent(WorkInProgress.class)) {
System.out.println("method Annotationed WorkInProgress!");
}
}
} } @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
@interface WorkInProgress {}
Documented>为加入注解的类书写文档,编译执行后执行javadoc的dos命令.就可以在该命令行
位置看到所生成的文档.
Inherited>当对某个类进行注解的时候,希望对继承他的子类也进行注解.默认情况下
没有使用该@Inherited注解方式,系统会觉得子类不须要继承该功能,例如以下:
/**
* @author Lean @date:2014-10-13
*/
@WorkInProgress
public class AnnotationSample { public static void main(String[] args) throws IllegalAccessException {
AnnotationSample obj=new AnnotationSample();
Class clazz=obj.getClass();
if (clazz.isAnnotationPresent(WorkInProgress.class)) {
System.out.println("class Annotationed WorkInProgress!");
}
Class childClass=AnnotationChildClass.class;
if (childClass.isAnnotationPresent(WorkInProgress.class)) {
System.out.println("child class Annotationed WorkInProgress!");
} } } @Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
@interface WorkInProgress {} class AnnotationChildClass extends AnnotationSample{ }
JAVA进阶-注解的更多相关文章
- Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...
- Java线程间通信方式剖析——Java进阶(四)
原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...
- Java进阶(三)多线程开发关键技术
原创文章,同步发自作者个人博客,转载请务必以超链接形式在文章开头处注明出处http://www.jasongj.com/java/multi_thread/. sleep和wait到底什么区别 其实这 ...
- 当我们说线程安全时,到底在说什么——Java进阶系列(二)
原创文章,同步发自作者个人博客,转载请以超链接形式在文章开头处注明出处http://www.jasongj.com/java/thread_safe/ 多线程编程中的三个核心概念 原子性 这一点,跟数 ...
- 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)
本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...
- Java进阶(七)正确理解Thread Local的原理与适用场景
原创文章,始自发作者个人博客,转载请务必将下面这段话置于文章开头处(保留超链接). 本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ Th ...
- Java进阶
Java进阶(一)Annotation(注解) Java进阶(二)当我们说线程安全时,到底在说什么 Java进阶(三)多线程开发关键技术 Java进阶(四)线程间通信方式对比 Java进阶(五)NIO ...
- Java进阶教程:使用Lombok提升开发效率
Java进阶教程:使用Lombok提升开发效率 Lombok Lombok是一种Java™实用工具,可用来帮助开发人员消除Java的冗长代码,尤其是对于简单的Java对象(POJO).它通过注释实现这 ...
- java进阶视频分享
更多资源和教程请关注公众号:非科班的科班. 如果觉得我写的还可以请给个赞,谢谢大家,你的鼓励是我创作的动力 课程目录介绍 01.开班仪式02.并发编程专题之多线程基础03.并发编程专题之Java内存模 ...
随机推荐
- 玩转Web之servlet(二)---servlet常见错误
1>403:tomcat发生错误 2> 404 :意思是服务器依据请求资源路径,找不到对应的资源 解决:1.依据http://localhost:8080/Web工程名/ur ...
- javascript 比量str今天的日期是,参数diff
function isToday(str) { var d = new Date(str.replace(/-/g, "/")); var todaysDate = new Dat ...
- 【嵌入式开发】写入开发板Linux系统-模型S3C6410
笔者 : 万境绝尘 转载请著名出处 最终拿到板子了, 嵌入式开发正式开启. 板子型号 : 三星 S3C6410 基于ARM11, 指令集基于arm6指令集; 为毛不是 Cortext A9的板子; 烧 ...
- NSIS 自定义页面制作关闭功能
因工作需要要自定义NSIS的安装页面,其中用到一个功能. 修改的是这个项目:https://github.com/nicecai/nsissource http://hamletsoft.com/ 在 ...
- 【J2SE】java实现简单照片查看器
程序执行结果: project结构图: 程序代码: import java.awt.BorderLayout; import java.awt.FileDialog; import java.awt. ...
- struts1吊牌<logic:iterate>
<logic:iterate>主要用于处理网页上的输出集合,集合是其中一般下列之一: 1. java对象的数组 2. ArrayList.Vector.HashMap等 具体使用方法请參考 ...
- 使用Eclipse设定Android开发环境
使用Eclipse设定Android开发环境 花了大概几天的时间最终搭建好了开发Android的环境了! 我是使用Eclipse +ADT顺利地搭建Android开发环境的. 如今Google以及An ...
- java+js实现完整的图片展示本地目录demo
java+js实现完整的图片展示本地目录demo 最近的项目满足需要,实现通过一个前端button点击事件,流行音乐浏览下的全部图片: 思路: - 获取到所需展示图片的本地目录内全部图片的文件绝对路径 ...
- jQuery整理笔记文件夹
jQuery整理笔记文件夹 jQuery整理笔记一----jQuery開始 jQuery整理笔记二----jQuery选择器整理 jQuery整理笔记三----jQuery过滤函数 jQuery整理笔 ...
- IntelliJ Idea中一个编译报错引发的
package verify; public class Verifier { private String name; public Verifier() { this.name = getClas ...