为Annotation注解添加各种属性

我们知道 对于 注解来说的声明和接口类似 ,那么 我们当然也可以为其添加属性  。

但是从 Java语音规范中得知,对于注解的属性类型 有限制 只能是 八个原始类型  String类型  Enum类型  Annotation注解类型 以及 Class类型 ,出了以上几个类型之外 为注解添加属性都会报错

public  @interface  MyAnnotation
{

  String   name() ;//添加String类型的属性

  int[]   arrayAttr() default {1,2,3,4,5};   //添加整形数组的属性  并且提供默认值

   .......
}

这样添加了属性之后我们要使用注解就 需要给注解添加上属性值了 如下

@MyAnnotation(name="xiaowei",arrayAttr={2,3,4,5})  

声明即可,如果属性有默认值那么   就可以不给有默认值的属性赋值 

在使用属性的时候我们可以像调用方法一样直接通过 注解对象调用属性 即可  。。。。

 

下面代码演示了 在注解中 添加 注解类型  字符串类型  枚举类型 等 的属性

 

1、一个枚举TrafficLamp的声明    TrafficLamp.java 

package me.test;
public enum TrafficLamp
{
   RED {
 @Override
 public TrafficLamp  nextLamp() {
  return  GREEN ;
 }
}  ,GREEN {
 @Override
 public TrafficLamp  nextLamp() {
  return   YELLOW;
 }
} ,YELLOW { ;
 @Override
 public TrafficLamp  nextLamp() {
  return  RED ;
 }
}  ;
   public  abstract TrafficLamp nextLamp();
}

2、元注解的声明  NewAnnotation.java

package me.test;
public @interface NewAnnotation
{  
 String name()  ;

class A
{}

3、MyAnnotation注解 的实现MuAnnotation.java

package me.test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface MyAnnotation
{  
  String age() default "20" ;
  String name() ;
  int[]  arrayAttr() default {1,2,3,4,5,6}; 
  TrafficLamp lamp()  default TrafficLamp.RED;
  NewAnnotation an() default @NewAnnotation(name="xiaowei") ;
}
4、Main方法所在类   MyAnnotationTest.java

package me.test;
import java.lang.annotation.Annotation;
import java.util.Arrays;
@MyAnnotation(name = "xiaowei",age="45"  )
public class MyAnnotationTest

    public static void main(String []args)
    {
     if(MyAnnotationTest.class.isAnnotationPresent( MyAnnotation.class))
     {
       MyAnnotation an=(MyAnnotation)MyAnnotationTest.class.getAnnotation(MyAnnotation.class) ;
       System.out.println(an.name()); 
       System.out.println(an.age()); 
       System.out.println(an.arrayAttr().length);
       System.out.println( an.lamp().nextLamp().name() );
       System.out.println(an.an().name());
     }
    }
}

 

时间: 2024-09-20 09:25:48

为Annotation注解添加各种属性的相关文章

JAVA怎么为注解添加Class属性?

问题描述 public@interfaceItcastAnnotation{inti();Strings();classn();//这样为什么不可以?要怎么添加?} 解决方案 解决方案二:classn();//这样为什么不可以?要怎么添加?Classn();解决方案三:没有class类,只有Class类.

详解Java编程中Annotation注解对象的使用方法_java

注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据.  1.基本语法Java SE5内置三种标准注解 @Override:表示当前的方法定义将覆盖超类中的方法.如果你不小心拼写错误,或者方法签名对不上被覆 盖的方法,编译器就会发出错误提示 @Deprecated:如果程序员使用了注解为它的元素,那么编译器就会发出警告信息 @SupperessWarnings:关闭不当的编译器警告信息. Java SE5内置四种元注解 @Target

hibernate中用annotation注解怎么样配置TIMESTAMP类型的数据呢

问题描述 请问hibernate中用annotation注解怎么样配置TIMESTAMP类型的数据并且能自动插入和更新呢?就是相当于mysql中timeTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP;这样的数据列,在hibernate中怎么样用annotation注解来配置呢(不要xml的配置方式).各位大虾帮帮忙啊,跪求中-- 解决方案 解决方案二:没用过注解吖.看下这个资料吧解决方案三:@Column(name="D_UP

CSS3实例教程:盒模型添加阴影属性box

文章简介:我们要对盒模型添加阴影怎么办呢?其实它的用法与text-shadow用法一样,只不过属性名称是box-shadow. 我们要对盒模型添加阴影怎么办呢?其实它的用法与text-shadow用法一样,只不过属性名称是box-shadow. 相关文章:CSS3教程:网页文字阴影属性text-shadow box-shadow: 此属性与text-shadow一样有4个值,前两个值分别表示水平方向位移距离和垂直方向的位移距离,第三个值表示阴影的模糊半径(包含0及以下的值均表示无模糊),最后一个

修改wordpress技巧:给WP的友情链接添加nofollow属性

文章简介:给WordPress友情链接添加Nofollow方法详解. 建博客的初期,交换友情链接是个不错的获得高质量链接的途径.但是,有时候虽然对方的网站给你个链接,却给你的友情链接加了Nofollow属性,相信了解nofollow标签的童鞋都知道Nofollow是一个HTML标签的属性值.这个标签的意义是告诉搜索引擎"不要追踪此网页上的链接"或"不要追踪此特定链接". 所以个人不赞成给wordpress博客的links也就是我们说的友情链接添加nofollow属性

java-Java向Exif添加新属性信息

问题描述 Java向Exif添加新属性信息 10C 如下就是我读取出来的Exif信息.如何用Java实现将User Comment这条属性添加到Exif信息中

数据集添加一个属性,如何填充值?

问题描述 数据集添加一个属性,如何填充值? 我有一个数据集,需要添加一个属性,属性取值范围为1-30,我该如何添加这些值?我使用过随机填充,但是感觉效果并不好,还有什么其他的填充方法?请赐教 解决方案 属性值难道不是根据你的业务需求进行设置的么? 解决方案二: 能说的具体点吗? 不太理解, 属性值有什么要求呢

objective ...-基于oc的ios开发,如何给一个系统类添加一个属性?

问题描述 基于oc的ios开发,如何给一个系统类添加一个属性? 基于oc的ios开发,如何给一个系统类添加一个属性? 目前我知道可以用继承或类别实现.但不知道哪种方式好 解决方案 用类别: .h文件 #import @interface UIButton (TLButton) @property(nonatomic,strong,readwrite)NSNumber* cityId; @property(nonatomic,strong,readwrite)NSNumber* typeId; @

关于wps的wmmAttributes.xml添加用户属性问题

问题描述 关于wps的wmmAttributes.xml添加用户属性问题:我想给用户添加一个属性,通过wmmAttributes.xml文件添加了testAttr属性,<attributeMapwmmAttributeName="testAttr"applicableMemberTypes="Person"dataType="String"valueLength="228"multiValued="true&q