黑马程序员技术交流社区

标题: 为注解增加属性出现错误 [打印本页]

作者: 党巾水    时间: 2012-7-3 13:31
标题: 为注解增加属性出现错误
本帖最后由 刘馨琪 于 2012-7-5 14:19 编辑



这个注解类里有arr()属性,然后引用的时候对其进行设置:
下图设置正常:



下图设置出现问题:



即使把图一中的int[] arr()设置成long[] arr(),问题依旧。请问是什么原因呢?谢谢!
作者: 党巾水    时间: 2012-7-4 10:14
无人回答吗?
作者: 周素强    时间: 2012-7-4 13:28
本帖最后由 周素强 于 2012-7-4 13:30 编辑

为注解添加高级属性
1,数组类型的属性:
  Int[] arrayAttr default{1,2,3};
  @MyAnnotation(arrayAttr={2,3,4})
  如果数组属性中只有一个元素,这时候属性值部分可以省略大括号
2,枚举类型的属性:
  EnumTest.TrafficLamp lamp();
  @MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
3,注解类型的属性:
  MetaAnnotation annotationAttr() default @MetaAnnotation("xxx");
  @MyAnnotation(annotationAttr=@MetaAnnotation("ttttt"))
可以认为上面这个@MyAnnotation是MyAnnotation类的一个实例对象,同样的道理也可以认为上面这个@MetaAnnotation是MetaAnnotation类的一个实例对象,调用代码如下:
  MetaAnnotation ma = myAnnotation.annotationAttr();
  System.out.println(ma.value());

可能是因为在注解类中定义数组属性时多了()
作者: 孙安庆    时间: 2012-7-4 16:10
数值范围越界了,int的范围2的-31次方2的31次方减1,最大也就是10位,你的数已经是11位了
改成long[] arr() 也不行是因为java不会自动的把一个很大的整数常量当做long来处理,默认都是int,在后面加上“L”后缀就可以了




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