java 自定义annotation

本文介绍了一个自定义Java注解@Description的应用案例,包括定义注解、获取注解值的方法,并展示了如何利用反射来读取这些注解信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、先看使用效果

package com.zjft.part.business.bar2.forcreate.encoder;

/**
 * 作业执行情况编码类
 * */
public class Bar2JobEncoder extends AbstractEncoder{
	
	/**
	 * 未执行
	 * */
	@Description(value="未执行",code=10)
	public static final int unexecuted = 10;
	
	/**
	 * 已执行
	 * */
	@Description(value="已执行",code=20)
	public static final int executed = 20;
	
	
	

}


上段代码中的@Description(value="已执行",code=20)便是自定义annotation,下面解释怎样定义annotation,至于如何获取value和code值将稍后解释。

2、定义annotation

先上代码

package com.zjft.part.business.bar2.forcreate.encoder;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Description {
	/**
	 * 属性值
	 * */
	int code();
	
	/**
	 * 描述
	 * */
	String value();
}

上段代码中,@Target标签代表该annotation用于属性、方法、参数或类的声明中。本文中FIELD表示@Description用于属性声明。


3、获取annotation里值

先通过反射获取Bar2JobEncoder 类的属性,然后判断该属性是否有用@Description annotation。若有,获得获得该annotation,调用Description的方法,从而获得标签里的值。具体代码如下:

Class<?> clazz = Class.forName(clazzname);
		Field[] fields = clazz.getDeclaredFields();
		Set<Field> annotionFields = new HashSet<Field>();
		if (fields!=null) {
			for (Field field : fields) {
				if (field.isAnnotationPresent(Description.class)) {
					annotionFields.add(field);
				}
			}
		}

for (Field field : annotionFields) {
			Description description = field.getAnnotation(Description.class);
			names[i] = description.value();
			codes[i] = description.code();
			i++;
		}

至此,定义annotation和获取里面的值方法已介绍完成。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值