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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩长征 中级黑马   /  2014-5-16 11:06  /  1557 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩长征 于 2014-5-18 13:32 编辑

复制代码
代码如上:关于注解的问题。打印结果为“abc”为何不是“123”?如果想要打印“123”的话该如何操作呢?

猜想:打印“abc”的原因应该是Demo类的字节码获取注解,所以注解ZhuJie中的value是“abc”。想要将打印“123”,就该用show方法的字节码来调用注解。那么该如何操作呢?

请大神赐教,谢谢。


6 个回复

倒序浏览
  1. public class ZhuJieText {
  2.         public static void main(String[] args) {
  3.                 ZhuJie z = (ZhuJie)Demo.class.getAnnotation(ZhuJie.class);
  4.                 System.out.println(z.value());
  5.         }
  6. }

  7. @Retention(RetentionPolicy.RUNTIME)
  8. @Target({ElementType.METHOD,ElementType.TYPE})
  9. @interface ZhuJie {
  10.                 String value() ;
  11. }

  12. @ZhuJie("abc")
  13. class Demo{
  14.         @ZhuJie("123") //传入的123不会把abc给替换掉吗?
  15.         public static void show(){}
  16. }
复制代码


为何代码没复制到里面呢
回复 使用道具 举报
本帖最后由 pandapan 于 2014-5-17 21:44 编辑

我试了试你的代码,运行的结果是abc。应该是你代码修改了之后,你并没有直接编译,而是运行的上次的代码。
回复 使用道具 举报
pandapan 发表于 2014-5-17 21:41
我试了试你的代码,运行的结果是abc。应该是你代码修改了之后,你并没有直接编译,而是运行的上次的代码。 ...

运行结果是abc,我的意思是,同一个注解类ZhuJie,注解了Demo类上面,又注解在了show方法上面。构造方法中接收了abc,但是没接收123啊。
回复 使用道具 举报
本帖最后由 pandapan 于 2014-5-17 22:38 编辑

首先要说一下的是,这个构造方法是没有什么接收(abc)之说的,如果你要找构造方法的注解,那么就应该写在构造方法上面(我没试过),注解只是java类,方法或者属性的标识符,写在哪里,就在那里起到作用。你在主函数中的代码的含义就是找到Demo类的注释,也就是写在Class Demo前面的注解。这个和对象是没有关系的。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
pandapan 发表于 2014-5-17 22:37
首先要说一下的是,这个构造方法是没有什么接收(abc)之说的,如果你要找构造方法的注解,那么就应该写在 ...

谢谢,我在好好琢磨一下
回复 使用道具 举报
  1. Method m = Demo.class.getMethod("show",null);
  2. System.out.println(m.getAnnotation(ZhuJie.class).value());
复制代码

结果为123了

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马