자바 JDK 기반 반사 복제 대상 별 동일 속성 값
4192 단어 자바
주의: 속성 명 이 일치 해 야 한 다 는 것 을 기억 하 세 요. 속성 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);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.