RT, 方法需求大概如下:
public class CloneUtil<T> { public T clone(T t) throws IllegalAccessException, InstantiationException { Class clazz = t.getClass(); T t2 = (T) cazz.newInstance(); // TODO: 2016/8/9 deep clone return t2; } }
代码里 todo 部分怎么写比较好? 这样写会不会有点蠢?有没有什么库可以做这种事?
![]() | 1 Troevil 2016-08-09 20:51:18 +08:00 自己写的话 比较蠢,java 原生反射效率很低的, 类库 参考 cglib beancopier apache beanutils PropertyUtils |
![]() | 3 tobyxdd 2016-08-09 21:02:02 +08:00 deep copy? 可以试试序列化以后再反序列化 |
4 yuankui 2016-08-10 09:54:23 +08:00 ![]() ``` public static<T> T convert(Object src, Class<T> clazz) { String json =JSON.toJSONString(src); T object = JSON.parseObject(json, clazz); return object; } ``` 我比较懒,直接用了 FASTJSON 。。。 |
![]() | 5 domty 2016-08-10 10:04:58 +08:00 原生反射限制太多,序列化后反序列化是好主意 |
![]() | 9 kost 2016-08-10 18:23:52 +08:00 ![]() 反射效率再低也比序列化效率高一两个数量级。 比如测试 100 次: Serialization: 12,941 milliseconds Reflection : 139 milliseconds 参考资料: http://www.matthicks.com/2008/05/fastest-deep-cloning.html http://javatechniques.com/blog/faster-deep-copies-of-java-objects/ |
12 breakeryang 2016-08-22 13:40:19 +08:00 @yuankui 简单直接 |