ClassReflection(Copy bean and list) 运用反射来实现bean或list的弱引用
来源:互联网 发布:网络名词流行用语解释 编辑:程序博客网 时间:2024/06/06 03:09
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.List;/** * Created by TerryZhang on 2017/1/21. */public class ClassReflection { /** * @param from 用于赋值的实体类 * @param to 需要待赋值的实体类 * @author ym * @CreateTime 2012-11-22下午03:23:23 * 描述:反射实体类赋值 */ public static void reflectionAttr(Object from, Object to) throws Exception { Class clazz1 = Class.forName(from.getClass().getName()); Class clazz2 = Class.forName(to.getClass().getName());// 获取两个实体类的所有属性 Field[] fields1 = clazz1.getDeclaredFields(); Field[] fields2 = clazz2.getDeclaredFields(); ClassReflection cr = new ClassReflection();// 遍历class1Bean,获取逐个属性值,然后遍历class2Bean查找是否有相同的属性,如有相同则赋值 for (Field f1 : fields1) { if (f1.getName().equals("id")) continue; Object value; if (f1.getType() == Boolean.class||f1.getType()==boolean.class) value = cr.invokeGetMethod(from, f1.getName(), true); else value = cr.invokeGetMethod(from, f1.getName(), false); for (Field f2 : fields2) { if (f1.getName().equals(f2.getName())) { Object[] obj = new Object[1]; obj[0] = value; cr.invokeSetMethod(to, f2.getName(), obj); } } } } /** * 执行某个Field的getField方法 * * @param clazz 类 * @param fieldName 类的属性名称 * @param isBoolean 是否为boolean类型 * @return */ private Object invokeGetMethod(Object clazz, String fieldName, boolean isBoolean) { String methodName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); Method method; try { if (isBoolean) method = Class.forName(clazz.getClass().getName()).getDeclaredMethod("is" + methodName); else method = Class.forName(clazz.getClass().getName()).getDeclaredMethod("get" + methodName); return method.invoke(clazz); } catch (Exception e) { e.printStackTrace(); return ""; } } /** * 执行某个Field的setField方法 * * @param clazz 类 * @param fieldName 类的属性名称 * @param args 参数,默认为null * @return */ private Object invokeSetMethod(Object clazz, String fieldName, Object[] args) { String methodName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); Method method; try { Class[] parameterTypes = new Class[1]; Class c = Class.forName(clazz.getClass().getName()); Field field = c.getDeclaredField(fieldName); parameterTypes[0] = field.getType(); method = c.getDeclaredMethod("set" + methodName, parameterTypes); return method.invoke(clazz, args); } catch (Exception e) { e.printStackTrace(); return ""; } } /** * 深度copy list 内部bean 需要序列化 * * @param src 来源list * @return * @throws IOException * @throws ClassNotFoundException */ public static List deepCopy(List src) throws IOException, ClassNotFoundException { ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(byteOut); out.writeObject(src); ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray()); ObjectInputStream in = new ObjectInputStream(byteIn); List dest = (List) in.readObject(); return dest; }}
0 0
- ClassReflection(Copy bean and list) 运用反射来实现bean或list的弱引用
- 10059---java反射实现bean的copy
- 利用反射机制,将ResultSet处理为bean或list的方法
- 运用反射从bean对象中取出属性 页面显示list优化
- SharedPreferences存取JavaBean对象或List<Bean>
- 【Util】java copy bean 反射
- List<map>转List<bean>
- json/bean/list转换
- fastjson转list bean
- Spring属性注入Bean的List属性
- 关于Comparable<T>解决List<bean>,依据bean的某个属性对list进行排序
- Json串与List<Bean>、Bean之间的转换,处理类中List<Bean>属性的序列化问题
- Java反射实现的Bean拷贝类
- 通过反射来实现List转为JSON
- list 、map、bean、json互转
- JSON,Bean,XML,List,Map
- Java List<Bean> 分组转换
- 利用Java反射机制将Json格式字符串反射为 Bean List
- 面向对象与面向过程的区别?
- CSDN-markdown编辑器官方文档介绍
- 噪声的定义
- iOS webView js和Objective c交互
- 安卓系统里最好用的VPN工具汇总
- ClassReflection(Copy bean and list) 运用反射来实现bean或list的弱引用
- JAVA判断字符串是否为空,是否只有空格
- Linux常用命令(一)之文件处理命令
- MFC关闭指定edit输入法
- 文章标题
- SpringMVC 学习 01 - 新建SpringMVC项目
- Android 自定义控件
- nodejs笔记(1)--事件模型
- C++中重载、重写(覆盖)和隐藏的区别