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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘张朋 中级黑马   /  2013-7-8 21:05  /  2044 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘张朋 于 2013-7-14 22:28 编辑

为什么我的注解类在eclipse下能正常运行,而在DOS命令里用javac  AnnotationTest.java会编译失败呢,错误是找不到MyAnnotation的符号。


源码如下:

  1. <P>package annotationtest;</P>
  2. <P>
  3. /*Deprecated 保存到运行时期*/</P>
  4. <P>@MyAnnotation(color = "red", value = "sha",arrayAttr = 1)
  5. public class AnnotationTest {</P>
  6. <P> /**
  7.   * @param args
  8.   */
  9. @MyAnnotation("fff")
  10. public static void main(String[] args) {
  11.      // TODO Auto-generated method stub
  12.      if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){
  13.          MyAnnotation annotation = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
  14.    System.out.println(annotation);
  15.    System.out.println(annotation.color());
  16.   }
  17. }</P>
  18. <P>}</P>
  19. <P> </P>
  20. <P>package annotationtest;</P>
  21. <P>import java.lang.annotation.ElementType;
  22. import java.lang.annotation.Retention;
  23. import java.lang.annotation.RetentionPolicy;
  24. import java.lang.annotation.Target;</P>
  25. <P>@Retention(RetentionPolicy.RUNTIME)
  26. @Target({ElementType.METHOD,ElementType.TYPE})
  27. public @interface MyAnnotation {
  28.     String color() default "blue";
  29.     String value();
  30.     int[] arrayAttr() default {1,3,5};</P>
  31. <P>}</P>
  32. <P> </P>
  33. <P> </P>
  34. <BLOCKQUOTE>
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 新人鼓励

查看全部评分

2 个回复

倒序浏览
JAVA从J2SE5开始提供名为annotation(注释,标注)的功能。Java的annotation,可以附加在package, class, method, field等上面,相当于给它们添加了额外的辅助信息。附加在package, class, method, field等上的Annotation,如果没有外部解析工具等对其加以解析和处理的情况,本身不会对Java的源代码或class等产生任何影响,也不会对它们的执行产生任何影响。但借助外部工具,比如javac,EJB容器等,可以对附加在package, class, method, field的annotation进行解析,可以根据annotation而做出相应的处理,比如运行时改变对象/方法的行为。

这个注解抽象得很,难怪那么多人被绕晕,我的理解就是MyAnnotation 没有被javac 解析,所以找不到符号。
回复 使用道具 举报
秦兰之 发表于 2013-7-9 00:19
JAVA从J2SE5开始提供名为annotation(注释,标注)的功能。Java的annotation,可以附加在package, class, m ...

谢谢啦,那为什么意见被eclipse编译为.class文件后还是不能通过 java AnnotationTest运行呢,难道也是没有被java解析?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马