注解实现两个类不同字段名称值复制

List<Emp> empLists=list;//数据集合
ConvertEntity<Emp, Employee> entity=new ConvertEntity<Emp, Employee>(Emp.class, empLists, null, new Emp(), Employee.class, new Employee());
		List<Employee> employeeList=entity.convertToEbs();

 

package com.aa.finance.ebs.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 对象转换
 * @author aa
 * @param <T>
 * @param <V>
 */
public class ConvertEntity<T,V> {
	  private static final Logger logger = LoggerFactory.getLogger(ConvertEntity.class);
	    Class<T> clazz;
	    List<T> list;
	    String param;
	    T t;
	    V v;
	    Class<V> clavv;
	    
	    
	    
	    public ConvertEntity(Class<T> clazz,List<T> list,String param,T t,Class<V> clavv,V v) {
	    	this.clazz=clazz;
	    	this.list=list;
	    	this.param=param;
	    	this.t=t;
	    	this.v=v;
	    	this.clavv=clavv;
	    }

	
	/**
	 * 对象赋值
	 * @param list
	 * @return
	 */
	public List<V>   convertToEbs() throws Exception{
		List<V> infos=new ArrayList<>();
		for (T t : list) {
			V v=clavv.newInstance();
			Field[] fieldsEbs = clavv.getDeclaredFields();//范型实例化
			Field[] fields=clazz.getDeclaredFields();
			for (Field field : fields) {
				for (Field fieldEbs : fieldsEbs) {
					 if(fieldEbs.isAnnotationPresent(AnnotationForEbs.class)){
						 AnnotationForEbs fieldAnno = fieldEbs.getAnnotation(AnnotationForEbs.class);
	                		if(fieldAnno.name().toString().equals(field.getName())){
	                			String fileName=fieldEbs.getName().toString();
	                			// 将属性的首字符大写
	                			fileName = fileName.substring(0, 1).toUpperCase() + fileName.substring(1);
	       					 	String setMethodName = "set"+fileName;
	       						//得到get方法的Method对象,带参数
//	       					 	try {
	       					 	Method setMethod = clavv.getDeclaredMethod(setMethodName,fieldEbs.getType());
								setMethod.setAccessible(true);
	       						Object object=getFieldValueByName(field.getName(), t);
									setMethod.invoke(v,object);
	                		}
	                	}
				}
			}
			infos.add(v);
		}
		return infos;
	}
    /**
     * 根据属性名获取属性值
     */
    private static Object getFieldValueByName (String fieldName, Object o)throws Exception {
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            String getter = "get" + firstLetter + fieldName.substring(1);
            Method method = o.getClass().getMethod(getter, new Class[]{});
            Object value = method.invoke(o, new Object[]{});
            return value;
        
    }
}
package com.aa.finance.bb.biz.entity.mysql;
public class Employee {
@AnnotationForEbs(name="empId")
private String  employeeId;
}
package com.aa.finance.bb.biz.entity.mysql;
public class Emp {
private String  empId;
//get set方法
}

 

package com.aa.finance.bb.util;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AnnotationForEbs {
	/** 对应的列名称 */
    String name() default "";
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值