为什么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

用反射去构建一个对象吧!相关推荐

  1. java 反射 json_java 反射机制构建JSON字符串

    java 反射机制构建JSON字符串.接着上一篇文章.今天继续学习利用java 反射机制构建JSON字符串. JSON的格式跟使用的方式方法就不讲了.这个百度一下就有--好了今天心情很糟糕.直接上代码 ...

  2. jq项目如何启服务_用小项目详解我们应该如何去构建我们的微服务

    前言 关于微服务的概念,说到底,很多人看了之后会认为没有什么意思,因为没有实际的东西说明,即使每个概念都明白了,也很难付之实践.所以这次,我来用一个实际的例子去说明,在实际的项目过程中我们会如何去构建 ...

  3. 高长勇老师:如何去构建企业的魂

    高长勇老师:如何去构建企业的魂 很多企业都在怎么去落地企业的文化.企业的文化其实并不是贴在墙上的标语或者是喊出来的口号.一个企业的文化一定是可以落地生根,能够形成员工的做事方式,所以企业的文化一定是企 ...

  4. 【机器学习】什么是决策树模型?如何去构建决策树?何时使用决策树?何时使用神经网络?

    系列文章目录 第十三章 Python 机器学习入门之决策树 目录 系列文章目录 前言 一.决策树模型 1 什么是决策树模型? 2 决策树学习的过程 二.如何确定在节点使用的特征 1 熵的定义 2 什么 ...

  5. 程序员,如何逐步去构建一个大型网站系统,面试必问!!!

    往往程序员在面试的时候,公司的面试任职资格上,总有一个大型系统网站的开发经验,我们先来看看几张面试招聘信息截图....... 大型网站定义 首先我们要思考一个问题,什么样的网站才是大型网站,从网站的技 ...

  6. PyTorch框架:(4)如何去构建数据

    接PyTorch框架:(3) 1.最基本的方法 (1)使用模块 模块1:TensorDataset.模块2:DataLoader 自己去构造数据集,然后一个batch一个batch的取数据,自己去写构 ...

  7. antlr 语言 库_关于ANTLR的通用库的需求:使用反射来构建元模型

    antlr 语言 库 我是一名语言工程师:我使用多种工具来定义和处理语言. 在其他工具中,我使用ANTLR:它简单,灵活,可以围绕它进行构建. 但是我发现自己围绕ANTLR为不同的项目重建了类似的工具 ...

  8. 关于ANTLR的通用库的需求:使用反射来构建元模型

    我是一名语言工程师:我使用多种工具来定义和处理语言. 在其他工具中,我使用ANTLR:它简单,灵活,可以围绕它进行构建. 但是,我发现自己围绕ANTLR为不同的项目重建了类似的工具. 我看到两个问题: ...

  9. 怎样去构建一个优质的Docker容器镜像

    抛砖引玉 先说结论 以不变应万变 善用 cache, 使用一个相对固定的 build 环境 构建 自己的基础镜像 洁身自好 保持 context 干净: .dockerignore 镜像环境清理 你需 ...

最新文章

  1. Java方法调用事件_Java中的事件处理和Java中actionPerformed方法的执行
  2. hdu 1394(树状数组求逆序数)
  3. linux安装phoenix 5.1.0(对应hbase 2.2.6)
  4. 【若依(ruoyi)】打开新的选项卡
  5. ORACLE会话数、连接数配置
  6. mysql数据库导入导出
  7. Centos7安装MySQL(多图)
  8. c语言快速排序_Damp;C思想-快速排序算法
  9. 去除点击链接时出现的虚线框
  10. python解析visio_再见,Visio!
  11. matlab混沌指数的计算,Matlab编程之混沌系统李雅普诺夫指数分析
  12. 链表:21. 合并两个有序链表
  13. 12306UserScript
  14. 17个支持图片外链的免费相册
  15. 计算机税率函数,个税计算器2021 - 个人所得税计算器2021 - 个人所得税的Excel函数计算公式整理...
  16. HDOJ 1859 最小长方形
  17. 什么样的用户标签系统,可以深入业务构建用户价值体系?
  18. Java 如何判断一个字符串中是否包含某一 子字符串
  19. 实验:DVWA-CSP Bypass(CSP绕过)
  20. 云端新增长,混合云融合发展新路径 | 云端会客厅第28期精彩回顾

热门文章

  1. 嵌入式开发试题1-100
  2. 开发相关手册、STM32各种库文件、相关软件、工具连接等(不断更新)
  3. 数据结构与算法:异或运算
  4. 常考数据结构与算法:单链表的排序
  5. mybaits十一:使用association分步查询
  6. NumberOf1Bits(leetcode191)
  7. 史上最通俗易懂的IPFS入门介绍:01
  8. Matlab基本函数-conj函数
  9. 测试Hadoop2.7.1
  10. 部署JTBC2.0网上商城(apache+tomcat+mysql)