黑马程序员技术交流社区

标题: 云青年之注解啊--张老师视频里的一段代码,编译不过 [打印本页]

作者: 蚂蚁搬家    时间: 2013-6-8 21:09
标题: 云青年之注解啊--张老师视频里的一段代码,编译不过
本帖最后由 蚂蚁搬家 于 2013-6-9 17:40 编辑
  1. </BLOCKQUOTE></DIV>张孝祥老师高新技术2讲到注解时视频里的一段代码,我原样敲了一遍,可就是编译不通过,不知道怎么回事,想不通?
  2. 上代码:代码段一:运行类
  3. <DIV class=blockcode>
  4. <BLOCKQUOTE><p>package com.itheima.enhance1;
  5. import java.lang.annotation.*;</p><p>@ItheimaAnnotation
  6. public class AnnotationTest1 {</p><p> /**
  7.   * 为AnnotationTest1类添加注解
  8.   */

  9. public static void main(String[] args) throws Exception
  10. {
  11.   //判断注解是不是存在,若存在则打印注解,若不存在,直接中断程序;
  12.   if(AnnotationTest1.class.isAnnotationPresent(ItheimaAnnotation.class))
  13.    ItheimaAnnotation annotation = (ItheimaAnnotation)AnnotationTest1.class.getAnnotation(ItheimaAnnotation.class);
  14.   else
  15.    return;
  16.   
  17.   System.out.println(annotation);
  18. }</p><p>}

  19. <div class="blockcode"><blockquote>
复制代码
代码段2:注解类
package com.itheima.enhance1;
import java.lang.annotation.*;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface ItheimaAnnotation {

}

死活编译不过,想不通,可能我自己有思维定势,各位凑个热闹,帮忙看一下了。谢谢{:soso_e163:}


作者: 蚂蚁搬家    时间: 2013-6-8 21:13
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
        ItheimaAnnotation cannot be resolved to a variable
        Syntax error on token "annotation", delete this token
        annotation cannot be resolved to a variable

        at com.itheima.enhance1.AnnotationTest1.main(AnnotationTest1.java:15)

上面是异常信息,就是代码段1编译不通过
作者: yasyas001    时间: 2013-6-8 22:41
  1. @ItheimaAnnotation
  2. public class AnnotationTest1 {  
  3.         private static ItheimaAnnotation annotation;
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.   //判断注解是不是存在,若存在则打印注解,若不存在,直接中断程序;
  7.                 if(AnnotationTest1.class.isAnnotationPresent(ItheimaAnnotation.class))
  8.                         annotation = AnnotationTest1.class.getAnnotation(ItheimaAnnotation.class);
  9.                 else
  10.                         return;
  11.                 System.out.println(annotation);
  12.         }
  13. }
复制代码
因为你的if下面还要用到annotation 这个变量,所以得把这个变量声明为成员变量
作者: 蚂蚁搬家    时间: 2013-6-9 08:55
yasyas001 发表于 2013-6-8 22:41
因为你的if下面还要用到annotation 这个变量,所以得把这个变量声明为成员变量 ...

我是在main函数上面加了@ItheimaAnnotation这个,一样的编译过不了
作者: yasyas001    时间: 2013-6-9 10:20
不会啊,没有问题的,我在下面又测试了一下主方法上是否有注解,你看一下
  1. public class AnnotationTest1{
  2.          private static ItheimaAnnotation annotation;
  3.          @ItheimaAnnotation
  4.          public static void main(String[] args) throws NoSuchMethodException, SecurityException {
  5.                 if(AnnotationTest1.class.isAnnotationPresent(ItheimaAnnotation.class)){
  6.                         annotation = AnnotationTest1.class.getAnnotation(ItheimaAnnotation.class);
  7.                         System.out.println(annotation);
  8.                 }
  9.                 else
  10.                         System.out.println("类上没有注解");
  11.                 //测试方法上是否有注解,有则打印,否则退出
  12.                 Method methodMain = AnnotationTest1.class.getMethod("main", String[].class);
  13.                 if(methodMain.isAnnotationPresent(ItheimaAnnotation.class)){
  14.                         annotation = methodMain.getAnnotation(ItheimaAnnotation.class);
  15.                         System.out.println(annotation);
  16.                 }
  17.                 else
  18.                         return;
  19.         }
  20. }
复制代码

作者: 蚂蚁搬家    时间: 2013-6-9 11:30
yasyas001 发表于 2013-6-9 10:20
不会啊,没有问题的,我在下面又测试了一下主方法上是否有注解,你看一下

晚上回去我再看一下了
作者: 袁梦希    时间: 2013-6-9 15:14
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}




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