黑马程序员技术交流社区

标题: 请教一个注解类的问题 [打印本页]

作者: 刘张朋    时间: 2013-7-8 21:05
标题: 请教一个注解类的问题
本帖最后由 刘张朋 于 2013-7-14 22:28 编辑

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

[attach]22736[/attach]
源码如下:

  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>
复制代码

作者: 秦兰之    时间: 2013-7-9 00:19
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 08:15
秦兰之 发表于 2013-7-9 00:19
JAVA从J2SE5开始提供名为annotation(注释,标注)的功能。Java的annotation,可以附加在package, class, m ...

谢谢啦,那为什么意见被eclipse编译为.class文件后还是不能通过 java AnnotationTest运行呢,难道也是没有被java解析?




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