用反射去构建一个对象吧!
为什么80%的码农都做不了架构师?>>>
比如想把 A (以下称modelWantToCast)的所有字段 赋值给B(以下称modelCastTo) 【需要字段名一样】
public static <T> T castModelToAnotherModel(Object modelWantToCast, Class<T> modelCastToClazz) {if (modelWantToCast == null) {return null;}// 粗暴地获取A的所有方法Method[] dtoMethod = modelWantToCast.getClass().getDeclaredMethods();String getMethodName;T modelCastTo = null;try {// 实例化这个BmodelCastTo = modelCastToClazz.newInstance();} catch (InstantiationException | IllegalAccessException e) {e.printStackTrace();}for (Method getMethod : dtoMethod) {getMethodName = getMethod.getName();if (getMethodName.indexOf("get", 0) == -1) {continue;}...... 代码在下面}return modelCastTo;}
1、之前经常用的很逗的方法
- 获取它的get set方法
- 从A中get出来
- 通过set方法set到A中去
String setMethodName = "set" + getMethodName.substring(3, getMethodName.length());// 获取set方法名字Object value = null;// 取值try {value = getMethod.invoke(modelWantToCast);} catch (IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}Class parameterTypes = getMethod.getReturnType();// 取参数的类Method setMethod;try {// 获取set方法setMethod = modelCastToClazz.getDeclaredMethod(setMethodName, parameterTypes);} catch (NoSuchMethodException | SecurityException e) {continue;}try {// 粗暴地invoke进去setMethod.invoke(modelCastTo, value);} catch (IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}
2、后来发现还有更加粗暴的方法
- 获取对象它get方法
- 从A中get出来
- 从field直接set进去
try {Object value = getMethod.invoke(modelWantToCast);// 取值if (value == null) {continue;}String fileName = getFileNameFromGetterOrSetter(getMethodName); // 从get方法获取属性名Field field = modelCastToClazz.getDeclaredField(fileName);field.setAccessible(true);field.set(modelCastTo, value);// 直接塞进去} catch (NoSuchFieldException | IllegalAccessException | InvocationTargetException e) {e.printStackTrace();}
转载于:https://my.oschina.net/anur/blog/1616022
用反射去构建一个对象吧!相关推荐
- java 反射 json_java 反射机制构建JSON字符串
java 反射机制构建JSON字符串.接着上一篇文章.今天继续学习利用java 反射机制构建JSON字符串. JSON的格式跟使用的方式方法就不讲了.这个百度一下就有--好了今天心情很糟糕.直接上代码 ...
- jq项目如何启服务_用小项目详解我们应该如何去构建我们的微服务
前言 关于微服务的概念,说到底,很多人看了之后会认为没有什么意思,因为没有实际的东西说明,即使每个概念都明白了,也很难付之实践.所以这次,我来用一个实际的例子去说明,在实际的项目过程中我们会如何去构建 ...
- 高长勇老师:如何去构建企业的魂
高长勇老师:如何去构建企业的魂 很多企业都在怎么去落地企业的文化.企业的文化其实并不是贴在墙上的标语或者是喊出来的口号.一个企业的文化一定是可以落地生根,能够形成员工的做事方式,所以企业的文化一定是企 ...
- 【机器学习】什么是决策树模型?如何去构建决策树?何时使用决策树?何时使用神经网络?
系列文章目录 第十三章 Python 机器学习入门之决策树 目录 系列文章目录 前言 一.决策树模型 1 什么是决策树模型? 2 决策树学习的过程 二.如何确定在节点使用的特征 1 熵的定义 2 什么 ...
- 程序员,如何逐步去构建一个大型网站系统,面试必问!!!
往往程序员在面试的时候,公司的面试任职资格上,总有一个大型系统网站的开发经验,我们先来看看几张面试招聘信息截图....... 大型网站定义 首先我们要思考一个问题,什么样的网站才是大型网站,从网站的技 ...
- PyTorch框架:(4)如何去构建数据
接PyTorch框架:(3) 1.最基本的方法 (1)使用模块 模块1:TensorDataset.模块2:DataLoader 自己去构造数据集,然后一个batch一个batch的取数据,自己去写构 ...
- antlr 语言 库_关于ANTLR的通用库的需求:使用反射来构建元模型
antlr 语言 库 我是一名语言工程师:我使用多种工具来定义和处理语言. 在其他工具中,我使用ANTLR:它简单,灵活,可以围绕它进行构建. 但是我发现自己围绕ANTLR为不同的项目重建了类似的工具 ...
- 关于ANTLR的通用库的需求:使用反射来构建元模型
我是一名语言工程师:我使用多种工具来定义和处理语言. 在其他工具中,我使用ANTLR:它简单,灵活,可以围绕它进行构建. 但是,我发现自己围绕ANTLR为不同的项目重建了类似的工具. 我看到两个问题: ...
- 怎样去构建一个优质的Docker容器镜像
抛砖引玉 先说结论 以不变应万变 善用 cache, 使用一个相对固定的 build 环境 构建 自己的基础镜像 洁身自好 保持 context 干净: .dockerignore 镜像环境清理 你需 ...
最新文章
- Java方法调用事件_Java中的事件处理和Java中actionPerformed方法的执行
- hdu 1394(树状数组求逆序数)
- linux安装phoenix 5.1.0(对应hbase 2.2.6)
- 【若依(ruoyi)】打开新的选项卡
- ORACLE会话数、连接数配置
- mysql数据库导入导出
- Centos7安装MySQL(多图)
- c语言快速排序_Damp;C思想-快速排序算法
- 去除点击链接时出现的虚线框
- python解析visio_再见,Visio!
- matlab混沌指数的计算,Matlab编程之混沌系统李雅普诺夫指数分析
- 链表:21. 合并两个有序链表
- 12306UserScript
- 17个支持图片外链的免费相册
- 计算机税率函数,个税计算器2021 - 个人所得税计算器2021 - 个人所得税的Excel函数计算公式整理...
- HDOJ 1859 最小长方形
- 什么样的用户标签系统,可以深入业务构建用户价值体系?
- Java 如何判断一个字符串中是否包含某一 子字符串
- 实验:DVWA-CSP Bypass(CSP绕过)
- 云端新增长,混合云融合发展新路径 | 云端会客厅第28期精彩回顾