JAVA进阶-注解
来源:互联网 发布:ubuntu gnome3 编辑:程序博客网 时间:2024/06/15 06:25
注解元数据分为4部分分别为Target,Documented,Inherited,Retention:
字段,类,返回值等等;
声明:
/** * @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//@WorkInProgressprivate int age;@WorkInProgresspublic static boolean doSomeThing() {// TODO Auto-generated method stubreturn false;}}
Retention>设置注解可见性;使用到RetentionPolicy枚举
RetentionPolicy.SOURCE>>编译器可见,但对.class文件和运行时不可见;
RetentionPolicy.CLASS>>默认工具可见,对.class文件可见,但运行不可见;
RetentionPolicy.RUNTIME>>运行时可见;不会被.class文件所知,在运行时告诉JVM的值;
以下例子为运行时内省检查,当一个元注解需要多个限定值的时,必须使用{}和逗号隔开,
如@Target({ElementType.METHOD,ElementType.TYPE})
/** * @author Lean @date:2014-10-13 */@WorkInProgresspublic class AnnotationSample {private int age;@WorkInProgresspublic static boolean doSomeThing() {// TODO Auto-generated method stubreturn 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 */@WorkInProgresspublic 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{}
0 0
- JAVA进阶-注解
- Java进阶之注解
- java进阶(一) Annotation注解
- java进阶(四):Java注解学习
- Java进阶(五十三)JAVA 注解机制
- Java进阶(五十三)JAVA 注解机制
- Java进阶(五十三)JAVA 注解机制
- Java进阶之Annotation(注解)
- Java 5.0注解知识快速进阶
- Java进阶(一)Annotation(注解)
- Java进阶之Annotation(注解)——自定义注解
- Java进阶之Annotation(注解)——注解处理器
- No_0616 Java进阶学习——Java注解学习
- Java进阶之Annotation(注解)——Annotation(注解)概念
- Java 进阶巩固:什么是注解以及运行时注解的使用
- Android进阶之自定义注解
- Android进阶之自定义注解
- Mycat高级进阶---Mycat注解
- C#获取web.config配置文件内容
- url 关于路径
- 设计模式
- JqueryEasyUi异步树加载
- xmpp学习2
- JAVA进阶-注解
- Activity生命周期
- 正则表达式教程
- 缀抓柞纵灼阻自资谆奏资庄桌谆总昨坠卓
- 我的博客开张了
- 2014.10.13总结(数据存储)
- 错误:”A valid provisioning profile for this executable was not found“
- 群晖DSM上安装Git Server,并与Xcode配合使用
- 互联万协议入门一