A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赖龙威 中级黑马   /  2013-10-15 16:46  /  2026 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么说@Deprecate的Retention是Runtime的?不理解

评分

参与人数 1黑马币 +3 收起 理由
周志龙 + 3

查看全部评分

2 个回复

倒序浏览
这个问题我今天搞明白啦~嘿嘿,是这么回事,Retention的值有三个,SOURCE,CLASS,RUNTIME,@Deprecate是标明该方法是过时的,
1.Retention值为SOURCE时,该注解在编译的时候就被过滤掉
2.Retention值为CLASS,该注解保存在.class文件中,在反射获取字节对象的时候被过滤掉。
3.Retention值为RUNTIME,该注解在反射的时候也能被取到。
我们做个实验:
如果我们通过反射可以获取@Deprecate注解对象并打印出来,那么@Deprecate就是RUNTIME的:
  1. @Deprecated
  2. public class AnnotationMain {
  3.         public static void main(String[] args) {
  4.                 AnnotationMain at = new AnnotationMain();
  5.                 Class atClass = at.getClass();
  6.                 if(atClass.isAnnotationPresent(Deprecated.class)){
  7.                         Deprecated d = (Deprecated)atClass.getAnnotation(Deprecated.class);
  8.                         System.out.println(d);
  9.                 }
  10.         }
  11. }
复制代码
结果输出@java.lang.Deprecated()说明确实如此!

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报

楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马