对象复制(反射法)

public static void copyProp(Object from, Object to, String... filterProp)  {
HashSet<String> filterSet = new HashSet<String>(Arrays.asList(filterProp));
Class<?> fromc = from.getClass();
Class<?> toc = to.getClass();
List<Field> to_fields = new ArrayList<Field>() ;
while (toc != null) {
to_fields.addAll(Arrays.asList(toc.getDeclaredFields()));
toc = toc.getSuperclass();
}
for (Field to_field : to_fields) {
try{
if (filterSet.contains(to_field.getName())||"serialVersionUID".equals(to_field.getName())) {
continue;
}
Field from_field = null;
try{
from_field = fromc.getDeclaredField(to_field.getName());
}catch (Exception e){
continue;
}
from_field.setAccessible(true);
Object value = from_field.get(from);
if(value==null){
continue;
}
to_field.setAccessible(true);
to_field.set(to, value);
}catch (Exception e){
e.printStackTrace();
}
}
}
  • 只copy有值对象
  • 不需要copy的属性用filterProp
  • 是能过反射属性注入方法实现,所有属性的名称类型必须一样

对象复制(fastJson转换)

单个

public static <T> T bean2OtherBean(Object bean, Class<T> tClass){
return JSON.parseObject(JSON.toJSONString(bean),tClass);
}

列表

public static <T> List<T> list2OtherList(List originList, Class<T> tClass){
List<T> list = new ArrayList<>();
if(!CollectionUtils.isEmpty(originList)){
for (Object obj : originList) {
T t = bean2OtherBean(obj,tClass);
list.add(t);
}
}
return list;
}
  • fastjson实现,属性不一样必须用注解

对象转MAP

public static <K,V> Map<K,V> bean2map(Object obj) throws IllegalAccessException {
Map<String, Object> map = new HashMap<>();
Class<?> clazz = obj.getClass();
for (Field field : clazz.getDeclaredFields()) {
field.setAccessible(true);
String fieldName = field.getName();
Object value = field.get(obj);
map.put(fieldName, value);
}
return (Map<K, V>) map;
}

Java对象操作工具的更多相关文章

  1. 使用XStream是实现XML与Java对象的转换(6)--持久化

    九.持久化 在第八节的示例中,当我们操作一组对象时,我们可以指定Writer.OutputStream来写出序列化后的XML数据,我们还可以指定Reader.InputStream来读取序列化后的XM ...

  2. Java对象转JSON时如何动态的增删改查属性

    1. 前言 日常开发中少不了JSON处理,少不了需要在JSON中添加额外字段或者删除特定字段的需求.今天我们就使用Jackson类库来实现这个功能. 2. JSON字符串增加额外字段 假如我们有这样结 ...

  3. 【Java技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路

    序列化和反序列化 序列化就是指把对象转换为字节码: 对象传递和保存时,保证对象的完整性和可传递性.把对象转换为有字节码,以便在网络上传输或保存在本地文件中: 反序列化就是指把字节码恢复为对象: 根据字 ...

  4. Java对象序列化剖析

    对象序列化的目的 1)希望将Java对象持久化在文件中 2)将Java对象用于网络传输 实现方式 如果希望一个类的对象可以被序列化/反序列化,那该类必须实现java.io.Serializable接口 ...

  5. 通过JAXB完成Java对象与XML之间的转换

    Java对象转换XML的过程叫marshal. XML转换到Java对象的过程叫unmarshal. 一.Java对象转化为XML 这里省略getter和setter方法 通过标注@XMLRootEl ...

  6. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

  7. Hibernate 系列 07 - Hibernate中Java对象的三种状态

    引导目录: Hibernate 系列教程 目录 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久化的角度关注应用对象的生命周期. 持久化声明周期是Hi ...

  8. 理解Java对象序列化

    http://www.blogjava.net/jiangshachina/archive/2012/02/13/369898.html 1. 什么是Java对象序列化 Java平台允许我们在内存中创 ...

  9. java对象与XML相互转化

    起因 最近在公司做了一次webservice相关的任务,其中我最敢兴趣的就是webservice接受到XML对应的流以后是如何方便的转化成java对象,而java对象又是如何生成对应的XML的. 目的 ...

随机推荐

  1. binary hacks读数笔记(ld 链接讲解 二)

    这块将介绍一下ld链接命令的具体使用.ld的作用:ld是GNU binutils工具集中的一个,是众多Linkers(链接器)的一种.完成的功能自然也就是链接器的基本功能:把各种目标文件和库文件链接起 ...

  2. 开发IDE的一些设置

    一.修改和设置idea或eclipse的快捷键: 二.idea的settings的一些设置: settings 可以导出,也可以导入.也可以设置每次新建和新打开一个工程用同一个setting 三.全局 ...

  3. cosbench使用方法

    前言 cosbench的功能很强大,但是配置起来可能就有点不是太清楚怎么配置了,本篇将梳理一下这个测试的配置过程,以及一些测试注意项目,以免无法完成自己配置模型的情况 安装 cosbench模式是一个 ...

  4. 3-colorability

    目录 1.1 3-colorability 1.1.1 3元可满足规约到3着色 1.1.2 证明充分和必要性 1.1 3-colorability 一个图的三着色问题:要使得边两头的结点颜色互不相同. ...

  5. com.aliyun.oss.ClientException: Connection error due to: Connection pool shut down

    com.aliyun.oss.ClientException: Connection error due to: Connection pool shut down[ErrorCode]: Unkno ...

  6. linux 更改mysql 数据存储目录

    https://www.cnblogs.com/hellangels333/p/8376177.html  参考位博主的文章,稍做改动 1.检查mysql数据库存放目录 mysql -u root - ...

  7. JVM字节码执行引擎

    一.概述 在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译器执行(通过即时编译器产生本地代码执行)两种选择,所有的Java虚拟机的执行引擎都是一致的:输 ...

  8. win10,ubuntu时间不对问题

    sudo apt-get install ntpdate sudo ntpdate time.windows.com   # ntp2.aliyun.com      然后将时间更新到硬件上: sud ...

  9. idea中运行tomcat不能访问8080主页问题

    问题 初次使用IntelliJ IDEA,但今天在运行项目启动Tomcat后,发现无法访问Tomcat首页,出现404错误:输入http://localhost:8080时无法访问Tomcat首页,但 ...

  10. Java数据结构(七)—— 排序算法

    排序算法(Sort Algorithm) 排序算法介绍和分类 将一组数据,依指定顺序进行排列 排序的分类 内部排序 指将需要处理的所有数据都加载到内部存储器中进行排序 外部排序 数据量过大,无法全部加 ...