Think in java笔记: Annotation
来源:互联网 发布:g92多头螺纹编程实例 编辑:程序博客网 时间:2024/05/17 05:12
Think in java笔记: Annotation
Annotation是什么?
Annotation是一种元数据信息,很奇怪的想起来了AspectJ的AOP,就是在方法、package等元素上加上一些标记,然后再自定负责自己的annotation,实现功能。和interface差不多,但是可以有默认值。如何定义一个annotation
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Test {}
定义annotation还需要meta-annotation:
@target
和@Retention
@target
:定义在哪使用这个annotation(比如说成员变量或方法)@Rentention
:定义什么时候可用,SOURCE 还是CLASS, 还是RUNTIME。
这样不包含任何element的annotation,被称为marker annotation.
Meta-annotations
name Description @Target 可以使用的ElementType类中的变量 @Rentention annotation信息保留多久,具体的类在RetentionPolicy @Documented 在javadocs中包含此annotation的信息 @Inherited 允许所有子类继承它们的父annotationannotation processors(annotation执行)
如果没有工具来读取annotation,annotations几乎就和评论就一样。一个重要的部分就是创建和使用annotation processors. Java提供了反射的方法来实现annotation processors.还提供了apt用来解析source code.public class UseCaseTracker { public static void trackUseCases(List<Integer> useCases, Class<?> cl){ for(Method m : cl.getDeclaredMethods()){ UseCase uc = m.getAnnotation(UseCase.class); if(uc != null){ System.out.println("Found Use Case:" + uc.id() + " " + uc.description()); useCases.remove(new Integer(uc.id())); } } for(int i : useCases){ System.out.println("Warning: Missing use case-" + i); } } public static void main(String[] args) { List<Integer> useCases = new ArrayList<Integer>(); Collections.addAll(useCases, 47, 48, 49, 50); trackUseCases(useCases, PasswordUtils.class); }}
Annotation Value限制
- compiler对value有限制要求的。没有任何Element可以拥有一个没有指定的value。这意味着elements元素必须拥有默认值或者使用的时候赋值。
- 任何基本类型必须赋值,不能使用null。意味着defaut或者赋值的时候,就必须使用一个确定的值。
0 0
- Think in java笔记: Annotation
- Think in java 笔记
- think in java 笔记
- Think in java笔记
- think in java 笔记
- Think in java 笔记
- Think In Java 笔记
- Think in Java 笔记
- Think in Java笔记
- Think in java笔记一则
- think in java 学习笔记
- Think In java 笔记一
- think in java笔记 upcasting
- Think in java笔记 final
- think in java笔记: synchronized
- 《Java编程思想》《Think in Java》笔记
- [Think in Java 笔记] 构造顺序
- [Think in Java 笔记] Final关键字
- win 7 64 bit IntelliJ IDEA 中 详细图解 如何使用GitHub(git)来实现项目的版本控制和管理
- 我的CSDN博客
- eclipse中maven插件新建web项目
- test
- zookeeper的安装和配置
- Think in java笔记: Annotation
- 一个数组除了一个元素只出现一次,其他元素全都出现了三次,输出出现一次的元素
- FastDFS分布文件系统Java客户端使用
- 第八周--项目2-建立链串的算法库
- 阿里云数据库团队招聘
- Android-onMeasure使用解决Scrollview嵌套listview冲突
- C++的精髓——虚函数
- 欢迎使用CSDN-markdown编辑器
- 【Android】Android开发之常用的loading等待效果实现,仿微博等待动画。两种实现方式详解