java annotation 属性_java annotation 获取属性

自定义Annotation

1.声明一个annotation,[email protected]

//声明注解

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documentedpublic @interfaceValueBind {enumfieIdType {

STRING, INT

};

fieIdType type()default fieIdType.STRING;//为属性提供一个默认值

String value()default "sandy";

}

@Target 表示注解用在什么位置,我这里用在属性上面,可用ElementType枚举类型主要有:

TYPE : 类、接口或enum声明

FIELD: 域(属性)声明

METHOD: 方法声明

PARAMETER: 参数声明

CONSTRUCTOR: 构造方法声明

LOCAL_VARIABLE:局部变量声明

ANNOTATION_TYPE:注释类型声明

PACKAGE: 包声明

@Retention 表示需要在什么级别保存该注解信息。可用RetentionPolicy枚举类型主要有:

SOURCE: 注解将被编译器丢弃(编译的时候删除掉)。

CLASS  :  注解在class文件中可用。但会被VM丢弃。

RUNTIME: VM将在运行时也保存注解(一般都是用这个,运行时通过反射读取注解)

@Documented:  将此注解包含在Javadoc中

2.新建一个需要使用Annotation的类

importtest.annotation.ValueBind.fieIdType;public classStudent {/**因为我为String类型在annotation文件中已经添加了默认值,所以这里可以不用值 **/@ValueBindpublicString name;/**因为这的默认值是String类型,而这用了int类型 ,所以我这里重新设了值 **/@ValueBind(type= fieIdType.INT, value = "15")public intage;publicString toString() {return String.format("Student[name=%s,age=%d]", name, age);

}

}

3.通过反射机制,得到Annotation的值

public static void main(String[] args) throwsException {//通过反射得到类

Object obj = Class.forName("test.annotation.Student").newInstance();//得到类的属性列表

Field[] fields =obj.getClass().getDeclaredFields();for (int i = 0; i < fields.length; i++) {//这个是检查类中属性是否含有注解

if (fields[i].isAnnotationPresent(ValueBind.class)) {//获取注解

ValueBind annotation = fields[i].getAnnotation(ValueBind.class);

String type=annotation.type().toString();if (type.equals("INT")) {

fields[i].setInt(obj, Integer.parseInt(annotation.value()));

}else if (type.equals("STRING")) {

fields[i].set(obj, annotation.value());

}

}

}

System.out.println(((Student) obj).toString());

}

文笔不好,看不看得懂,随意

参考:

原文:http://www.cnblogs.com/sleepend/p/3834036.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值