自定义注解 类属性转Enum

使用自定义注解把一个对象的属性转化成对应的枚举集合

枚举

public interface BaseEnum<T> {

    T getCode();

}
public enum AttrEnum implements BaseEnum<Integer>{
	enum10(10),enum20(20);
    private Integer code;
    AttrEnum(int i) {
		this.code = i;
	}
	@Override
	public Integer getCode() {
		// TODO Auto-generated method stub
		return code;
	}
    public static AttrEnum getByCode(Integer code) {
    	for(AttrEnum _enum:AttrEnum.values()) {
    		if(code==_enum.getCode()) {
    			return _enum;
    		}
    	}
    	return null;
    }
}

自定义注解

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 FieldCovertEnumAnnotation {
	
	int enumCode();
	
	String enumName();

}

对象

public class EnumInfo {
	@FieldCovertEnumAnnotation(enumCode=10,enumName="AttrEnum")
	private Integer attr1;
	
	@FieldCovertEnumAnnotation(enumCode=20,enumName="AttrEnum")
	private Integer attr2;
	
	private Integer attr3;

	
	
	public EnumInfo(Integer attr1, Integer attr2) {
		super();
		this.attr1 = attr1;
		this.attr2 = attr2;
	}

}

属性转枚举集合方式

public static void main(String[] args) throws Exception{

		   EnumInfo info = new EnumInfo(1,2);
		   Map<AttrEnum,Integer> enumMaps = getEnums(AttrEnum.class,info); 
		   System.out.println(enumMaps);
		   
	}
	public static <T extends BaseEnum> Map<T,Integer> getEnums(Class<T> cls,EnumInfo info) throws Exception{
		   Map<T,Integer> enumMaps =new HashMap<T,Integer>();
		   for(Field field:info.getClass().getDeclaredFields()) {
			   if(field.isAnnotationPresent(FieldCovertEnumAnnotation.class)) {
				   FieldCovertEnumAnnotation annotation = field.getAnnotation(FieldCovertEnumAnnotation.class);
				   Integer code = annotation.enumCode();
				   Method method = cls.getMethod("getByCode",Integer.class);
				   T _enum = (T)method.invoke(null,code);
				   field.setAccessible(true);
				   Integer value = (Integer)field.get(info);
				   enumMaps.put(_enum,value);
			   }
		   }
		return enumMaps;
	}

执行结果

{enum10=1, enum20=2}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值