为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());
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值