java 用户自定义的父类转换成子类的方法
在工作中,一般是实体类对应的数据库表,另外再定义一个Model继承实体类,在model里往往添加一些辅助的属性。我们从数据库查出的数据放在实体类里,但是展现数据时需要用到model类,这时就需要把实体类转换成Model类。父类不可能强制转换成子类,所以写了一个通用的方法,适用于这种场景下的转换,代码如下:
/*** 通过public的 get set方法进行复制,适合用于父类转换成子类* @param objSource* @param clazzSrc* @param clazzDes* @return* @throws InstantiationException* @throws IllegalAccessException* @throws IllegalArgumentException* @throws InvocationTargetException*/public static <T, K> T copyByMethod(K objSource,Class<K> clazzSrc,Class<T> clazzDes ) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { if(null == objSource) return null;//如果源对象为空,则直接返回null T objDes = clazzDes.newInstance(); return mergeByPublicMethod(objSource, objDes, clazzSrc, clazzDes); } public static <T, K> T mergeByPublicMethod(K objSource,T objDes,Class<K> clazzSrc,Class<T> clazzDes) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ if(null == objSource) return null;//如果源对象为空,则直接返回null
//获取目标对象的所有属性
Method[] methodDeses = clazzDes.getMethods();
Map<String,Method> m = new HashMap<String, Method>();
// 循环遍历方法,获取set方法
for ( Method method : methodDeses )
{
//如果不是set方法则跳过
if(!method.getName().startsWith("set")) continue;
m.put(method.getName().substring(3), method);
}
// 获得源对象所有方法
Method[] sourceMethods = clazzSrc.getMethods();
// 循环遍方法
for ( Method method : sourceMethods )
{
//如果是set方法则跳过
if(!method.getName().startsWith("get")) continue;
//如果目标对象不存在该方法,则跳过
if(!m.containsKey(method.getName().substring(3))) continue;
m.get(method.getName().substring(3)).invoke(objDes, method.invoke(objSource));
}
return objDes;
}
java 用户自定义的父类转换成子类的方法相关推荐
- java 父类转换成子类的方法
/* 父类转换成子类的特点: 1:父类转换成子类不能自动完成 2:父类转换成子类的前提是父类的真身是这个子类 3:如果这个父类的真身是子类B,不能强制转换成子类A,只能转换成B. */ class T ...
- 父类转换成子类, 或者是类之间属性拷贝
问题很怪, 其实本不应该这么做的, 将父类转换成子类本就是不安全的行为. 但哪有事事顺心的, 真遇到了还是得解决. /*** 父类*/ class Foo {private String name; ...
- java父类转换成子类_【转】java 父类与子类的转换
最近同事调的一个服务报错,查看后是日期之间转换出的问题.代码里是把 java.sql.Date 类型的对象 强制转换为 java.sql.Timestamp 类型的对象.报java.lang.Clas ...
- C# 里氏转换(父类转换成子类)( is as )
里氏转换: 1.子类可以赋值给父类 2.如果父类中装的是子类对象,则可以将这个父类转换为对应的子类对象 ---->关键字 1.is:返回bool类型,指示是否可以做这个转换 2.as:如果转换成 ...
- java如何将string转换成date_java如何将string类型转为date类型?Java的转型方法
学习Java的小伙伴们有时候可能会碰到这么一些烦恼,写日期的时候代码一直报错,原因就是日期一直写的是字符串,在项目里就不能写成字符串了,必须把字符串类型转成日期类型,那Java中如何将字符串Strin ...
- java 父类转子类失败_父类不能转换成子类
父类不能转换成子类 Exception in thread "main"java.lang.ClassCastException: Person cannot be cast to ...
- java 父类强制转换为子类_[java]Java中父类强制转换成子类的原则
Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用. 例: public class Test { public static void main(Str ...
- java 子类 父类 转换_Java子类与父类之间的类型转换
1.向上转换 父类的引用变量指向子类变量时,子类对象向父类对象向上转换.从子类向父类的转换不需要什么限制,只需直接蒋子类实例赋值给父类变量即可,这也是Java中多态的实现机制. 2.向下转换 在父类变 ...
- C#里氏转换,子类赋值父类,父类强制转换成子类的理解
C#里氏转换,子类赋值父类,父类强制转换成子类的理解 最近在学习C#,在父类和子类的学习上有不理解的地方. Father f = new Son(); 这样的一个实例化程序中,内存时怎么样处理的,为什 ...
最新文章
- leetcode307. Range Sum Query - Mutable
- 关于Integer.MAX_VALUE + 1 = Integer.MIN_VALUE 问题
- POJ - 2893 M × N Puzzle(n*m数码问题+逆序对结论)
- ASP.NET MVC 4 过滤器(Authorize)
- python生成矩阵_如何在Python中生成矩阵?
- 小程序FMP优化实录,大厂面试题汇总
- IIS 部署asp.net Core程序注意事项
- 数据结构实验之图论九:最小生成树_初高中数学竞赛训练----图论初步2
- 计算机应用基础的题库,统考计算机应用基础题库
- 西双版纳真的适合养老吗?
- 命令行运行postman
- Softmax Derivation
- php 正则匹配 文件,php – 正则表达式匹配.htaccess中的一系列文件类型
- Js中的window.parent ,window.top,window.self 代表的对象
- C语言malloc函数
- ubuntu18.04 端口转发工具 Rinetd
- 微信快速引流的18种加人方法秘籍
- 廉颇老矣?尚能饭否?64岁的Python之父被微软录取!
- 2020 第一周工作总结:TAGE分支预测器算法
- 小米路由 php 服务器地址,小米路由器ip地址能改吗 小米路由器ip地址修改-192路由网...