@Retention的3个参数,都是在哪些情况下使用的?

@Retention :用来说明该注解类的生命周期。它有以下三个参数:

RetentionPolicy.SOURCE : 注解只保留在源文件中

RetentionPolicy.CLASS : 注解保留在class文件中,在加载到JVM虚拟机时丢弃

RetentionPolicy.RUNTIME : 注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解。

在哪些情况下使用这三个注解?

关于这个问题,个人感觉这篇文章写的还可以。http://blog.csdn.net/github_35180164/article/details/52118286

可以看一下这个 http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html

一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解;如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,则可选用 SOURCE 注解。