黑马程序员技术交流社区

标题: 关于注解的属性的问题? [打印本页]

作者: 韩长征    时间: 2014-5-16 11:06
标题: 关于注解的属性的问题?
本帖最后由 韩长征 于 2014-5-18 13:32 编辑

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

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

请大神赐教,谢谢。



作者: 韩长征    时间: 2014-5-16 11:07
  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:41
本帖最后由 pandapan 于 2014-5-17 21:44 编辑

我试了试你的代码,运行的结果是abc。应该是你代码修改了之后,你并没有直接编译,而是运行的上次的代码。
作者: 韩长征    时间: 2014-5-17 22:33
pandapan 发表于 2014-5-17 21:41
我试了试你的代码,运行的结果是abc。应该是你代码修改了之后,你并没有直接编译,而是运行的上次的代码。 ...

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

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

谢谢,我在好好琢磨一下
作者: 韩长征    时间: 2014-5-18 13:55
  1. Method m = Demo.class.getMethod("show",null);
  2. System.out.println(m.getAnnotation(ZhuJie.class).value());
复制代码

结果为123了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2