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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓飞飞 中级黑马   /  2012-4-30 09:09  /  1924 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package cn.itcast.day2;
//在使用注解实例时就要为注解中的属性赋值,以及数组属性赋值的方法,在加上为注解类型的属性赋值
@ItcastAnnotation(color="red",value="sfwe",arrayAtrr={1,2,3},annotation1=@MetaAnnotation("ifuh"))//声明:除value以外,其他属性都有默认值。这里在类直接里为value设值了。
public class AnnotationTest {
/**
  * @param args
  */
//只需给value属性赋值时,就不用写属性名value了
@ItcastAnnotation("sfgewg")//在方法的注解中也为value赋值了
public static void main(String[] args) throws Exception{
  // TODO Auto-generated method stub
  //用反射的方法查看标注到该类上的自定义注解是否存在
  if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)){
   ItcastAnnotation annotation =(ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class );
   //在查看注解属性时,要以方法形式调用
   System.out.println(annotation.color());
   //查看value属性
   System.out.println(annotation.value());//这里的结果为类注解的value属性的值。
   //查看数组属性
   System.out.println(annotation.arrayAtrr().length);
   //查看枚举属性
   System.out.println(annotation.lamp().nextLamp().name());
   //查看注解属性
   System.out.println(annotation.annotation1().value());
  }
}
}
我的问题是:一个即能放在类上也能放在方法上的注解,在类上使用了该注解并为属性赋了值,在方法上也用了该注解也赋了值。那么查看该注解属性的值时,为什么是类上的注解的值??有什么方法可查看方法上的注解的值呢????

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 徐晓磊 于 2012-4-30 18:25 编辑

     
   不知道怎么回事,代码复制不了。就截了个图说明。
   1.首先回答第一个问题:一个即能放在类上也能放在方法上的注解,在类上使用了该注解并为属性赋了值,在方法上也用了该注解也赋了值。那么查看该注解属性的值时,为什么是类上的注解的值??
你应该了解了注解中的三个基本注解,其中对一个注解进行声明的时候如果加了@REtention注解,并给了属性值,那么就会让改注解在属性值描述的范围内有效,说明了注解只是描述性标签。那么你对一个类的注解只会描述该类的一些信息,不是对类中的成员对象进行描述。我写了个小例子
改例子中注意方法show的注解我注释了,那么获取方法的注释后,发现输出为null,可以表明注解的标签性质,只对标签的对象有效。
   2.获取方法的注解在这个小例子中也有说明,就是取消show方法注解的注释,然后在main方法中使用method类的getAnnotation方法获取。

捕获1.PNG (21.16 KB, 下载次数: 36)

捕获1.PNG
回复 使用道具 举报
定义注解的时候要通元注解指定注解的一些性质:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)

Retention是注解生存周期,有运行时、编译时、class。
Target是注解使用与哪些目标,包括类注解、方法注解、字段(也称之域)注解等,

如果楼主定义的注解这两个属性没问题也就是生存周期是运行时,目标可以应用在类和方法上,
你的注解用在了哪个目标上,那它就属于这个目标,如果这个注解同时用于多个目标相当于创建了多个“注解对象”,他们都属于各自的目标。
如果楼主这些都清楚只是不知道怎么获取方法的注解,那可以用反射获取方法注解
代码:
Method method = youclass.getClass().getMethod("Methodname", new Class[0]);
method.getAnnotation(MyAnnotation.class);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马