자바 JDK 기반 반사 복제 대상 별 동일 속성 값

4192 단어 자바
이 방법 은 외부 jar 패 키 지 를 도입 할 필요 가 없습니다. JDK 반사 처리 복사 대상 만 을 기반 으로 성능 이 좋 고 문제 가 있 으 면 메 일 로 보 낼 수 있 습 니 다 ([email protected]) 문제 가 있 으 면 모두 함께 토론 하고 공부 합 시다.©
주의: 속성 명 이 일치 해 야 한 다 는 것 을 기억 하 세 요. 속성 get/set 방법 은 일치 하 는 방법 명 이 필요 합 니 다!!
package com.alone.myproject.common.utils;

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

/**
 * 

Description: [ ]

* Created on 2019 08 20 * @author 연애 하 다 * @version 1.0 * Copyright (c) 2019 © */ public abstract class BeanUtil { /** * Description: [ ] * @param objSource * @param clazz class * @return: T * Created on 2019 08 20 * @version 1.0 * Copyright (c) 2019 © **/ public static T copyProperties(Object objSource, Class clazz) { if (objSource == null) return null; try { T objDes = clazz.newInstance(); Field[] fields = objSource.getClass().getDeclaredFields(); Field[] fieldsSup = objSource.getClass().getSuperclass().getDeclaredFields(); Method[] method = clazz.getMethods(); if (null != fields) { assignment(objSource, clazz, objDes, fields, method); } if (null != fieldsSup) { assignment(objSource, clazz, objDes, fieldsSup, method); } return objDes; } catch (Exception e) { e.printStackTrace(); } return null; } /** * Description: [ ] * @param objSourceList -list * @param clazz class * @return: List -list * Created on 2019 08 20 * @version 1.0 * Copyright (c) 2019 © **/ public static List copyList(List objSourceList, Class clazz) { if (null == objSourceList) return null; List target = new ArrayList(); for (E souece : objSourceList) { target.add(copyProperties(souece, clazz)); } return target; } /** * Description: [ ] * @param objSource * @param clazz class * @param objDes * @param fields * @param method * @return: void * Created on 2019 08 20 * @version 1.0 * Copyright (c) 2019 © **/ private static void assignment (Object objSource, Class clazz, T objDes, Field[] fields, Method[] method) { try { for (Field field : fields) { field.setAccessible(true); if (checkMethod(method, field.getName())) { String setMethodName = "set" + caseInitials(field.getName()); Method setMethod = clazz.getMethod(setMethodName, new Class[]{field.getType()}); setMethod.invoke(objDes, field.get(objSource)); } } } catch (Exception e) { e.printStackTrace(); } } /** * Description: [ set - ] * @param method * @param attribute * @return: boolean false- set * Created on 2019 08 20 * @version 1.0 * Copyright (c) 2019 © **/ private static boolean checkMethod(Method[] method, String attribute){ if (null == method || null == attribute) return false; for (Method md : method) { String methodName = md.getName(); String attributeMethod = "set" + caseInitials(attribute); if (methodName.equals(attributeMethod)) return true; } return false; } /** * Description: [ ] * @param attribute * @return: java.lang.String * Created on 2019 08 20 * @version 1.0 * Copyright (c) 2019 © **/ private static String caseInitials(String attribute){ if (null == attribute) return null; char[] cs = attribute.toCharArray(); cs[0] -= 32; return String.valueOf(cs); } }

좋은 웹페이지 즐겨찾기