import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* 數據操作工具類
* @author xuyang
* @time 2016/11/10 15:58
*/
public class DataHelper {
/**
* 替換對象的字段數據(對象類型必須相同)
* @param sourceObject 被替換的源數據對象 replaceObject 替換的數據對象
* @return Object 替換後的數據對象
* @author xuyang
* @time 2016/11/10 15:58
*/
public static <T> T updateObject(T sourceObject,T replaceObject){
Class<?> sourceClazz = sourceObject.getClass();
Field[] sourceFields = sourceClazz.getDeclaredFields();
Class<?> replaceClazz = sourceObject.getClass();
Field[] replaceFields = replaceClazz.getDeclaredFields();
try {
for (int i = 0;i < replaceFields.length;i++){
Field replaceField = replaceFields[i];
replaceField.setAccessible(true);
//字段子更新賦值判斷
if (null != replaceField.get(replaceObject)) {
Field sourceField = sourceFields[i];
sourceField.setAccessible(true);
sourceField.set(sourceObject,replaceField.get(replaceObject));
}
}
}catch (Exception e){
e.printStackTrace();
}
return sourceObject;
}
/**
* 替換對象的字段數據(對象類型可以不同,只替換同類型同字段名的字段值)
* @param sourceObject 被替換的源數據對象 replaceObject 替換的數據對象
* @return Object 替換後的數據對象
* @author xuyang
* @time 2016/11/10 15:58
*/
public static <T> T updateDifObject(T sourceObject,Object replaceObject){
Class<?> sourceClazz = sourceObject.getClass();
Field[] sourceFields = sourceClazz.getDeclaredFields();
Class<?> replaceClazz = replaceObject.getClass();
Field[] replaceFields = replaceClazz.getDeclaredFields();
try {
for (int i = 0;i < replaceFields.length;i++){
Field replaceField = replaceFields[i];
replaceField.setAccessible(true);
//字段子更新賦值判斷
if (null != replaceField.get(replaceObject)) {
for (int j = 0; j < sourceFields.length; j++) {
Field sourceField = sourceFields[j];
if(sourceField.getName().equals(replaceField.getName())
&& sourceField.getType().getName().equals(replaceField.getType().getName())){
sourceField.setAccessible(true);
sourceField.set(sourceObject,replaceField.get(replaceObject));
break;
}
}
}
}
}catch (Exception e){
e.printStackTrace();
}
return sourceObject;
}
/**
* 判斷對象某些值是否爲空
* @param object
* @param <T>
* @return
* @author gaoliubei
*/
public static <T> String verify(T object,String[] needVerify)
{
Class<?> sourceClazz = object.getClass();
Field [] fields = sourceClazz.getDeclaredFields();
StringBuilder result = new StringBuilder();
boolean isLegal = true;
for (int i = 0;i < fields.length;i++)
{
Field field = fields[i];
field.setAccessible(true);
try {
Object value = field.get(object);
if (value == null)
{
String filedName = field.getName();
boolean isd = false;
for (int j = 0;j < needVerify.length; j++)
{
String isResult = needVerify[j];
if (isResult == filedName)
{
isLegal = false;
isd = true;
break;
}
}
if (isd)
{
result.append(filedName+" : 不能爲空 ");
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
if (!isLegal)
{
return result.toString();
}
return null;
}
/**
* map轉對象
* @param map
* @param beanClass
* @return
* @throws Exception
*/
public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) {
try {
if (map == null)
return null;
Object obj = beanClass.newInstance();
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
Method setter = property.getWriteMethod();
if (setter != null) {
setter.invoke(obj, map.get(property.getName()));
}
}
return obj;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
/**
* 對象轉map
* @param obj
* @return
*/
public static Map<?, ?> objectToMap(Object obj) {
try {
if(obj == null)
return null;
Map<String, Object> map = new HashMap<String, Object>();
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (key.compareToIgnoreCase("class") == 0) {
continue;
}
Method getter = property.getReadMethod();
Object value = getter!=null ? getter.invoke(obj) : null;
map.put(key, value);
}
return map;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
自定義對象數據替換其字段值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.