2019独角兽企业重金招聘Python工程师标准>>>

解释主要在代码里,在这里就不多废话了,直接上代码:

package onlyfun.caterpillar;public class Student {private String name;private int score; public Student() {name = "N/A"; } public Student(String name, int score) { this.name = name; this.score = score; } public void setName(String name) {this.name = name;}public void setScore(int score) {this.score = score;}public String getName() { return name; } public int getScore() { return score; } public String toString() {return name + ":" + score;}
}
package onlyfun.caterpillar;import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Map;public class CommandUtil {// 给定Map对象及要产生的Bean类名称// 可以取回已经设定完成的对象public static Object getCommand(Map requestMap, String commandClass) throws Exception {Class c = Class.forName(commandClass);Object o = c.newInstance();return updateCommand(requestMap, o);}// 使用reflection自动找出要更新的属性public static Object updateCommand(Map requestMap, Object command) throws Exception {Method[] methods = command.getClass().getDeclaredMethods();for(int i = 0; i < methods.length; i++) {// 略过private、protected成员// 且找出必须是set开头的方法名称if(!Modifier.isPrivate(methods[i].getModifiers()) &&!Modifier.isProtected(methods[i].getModifiers()) &&  methods[i].getName().startsWith("set")) {// 取得不包括set的名称String name = methods[i].getName().substring(3).toLowerCase();// 如果setter名称与键值相同// 呼叫对应的setter并设定值if(requestMap.containsKey(name)) {String param = (String) requestMap.get(name);Object[] values = findOutParamValues(param, methods[i]);methods[i].invoke(command, values);}}}return command;  }// 转换为对应类型的值private static Object[] findOutParamValues(String param, Method method) {Class[] params = method.getParameterTypes();Object[] objs = new Object[params.length];for(int i = 0; i < params.length; i++) {if(params[i] == String.class) {objs[i] = param;}else if(params[i] == Short.TYPE) {short number = Short.parseShort(param);objs[i] = new Short(number);}else if(params[i] == Integer.TYPE) {int number = Integer.parseInt(param);objs[i] = new Integer(number);}else if(params[i] == Long.TYPE) {long number = Long.parseLong(param);objs[i] = new Long(number);}else if(params[i] == Float.TYPE) {float number = Float.parseFloat(param);objs[i] = new Float(number);}else if(params[i] == Double.TYPE) {double number = Double.parseDouble(param);objs[i] = new Double(number);}else if(params[i] == Boolean.TYPE) {boolean bool = Boolean.parseBoolean(param);objs[i] = new Boolean(bool);}}    return objs;}
}
package onlyfun.caterpillar;import java.util.*;public class CommandUtilDemo {public static void main(String[] args) throws Exception {Map<String, String> request = new HashMap<String, String>();request.put("name", "wenhaozhong");request.put("score", "90");
//        Object obj = CommandUtil.getCommand(request, args[0]);Object obj = CommandUtil.getCommand(request, "onlyfun.caterpillar.Student");System.out.println(obj);}
}

输出结果为:

转载于:https://my.oschina.net/zhongwenhao/blog/189682

java反射(reflect)机制模拟javabean的实现相关推荐

  1. 浅谈Java反射(Reflect)技术--常用方法

    Java反射(Reflect)技术 概念:动态获取在当前Java虚拟机中的类.接口或者对象等等信息(运行过程中读取内容) 1.作用(面试问题): 1.1 解除两个类之间的耦合性,即在未得到依赖类的情况 ...

  2. java反射 初始化bean_通用javabean初始化(反射机制)

    主要看点: 1. 反射机制的使用 解决所有field都可赋值. fields[i].setAccessible(true); 2. 赋值方法 类型识别及赋值.instanceof,fields[i]. ...

  3. 反射(reflect)机制

    什么是反射 官方对此有个非常简明的介绍,两句话耐人寻味: 反射提供一种让程序检查自身结构的能力 反射是困惑的源泉 要深刻理解反射,个人感觉需要花时间在官方博客上再加以练习,循序渐进,慢慢体会. 反射的 ...

  4. 转换实体类_利用Java反射机制进行Map和JavaBean间转换

    Java中利用反射进行Map和JavaBean间转换 在日常工作中,有时候我们可能会遇到以下这样的情况发生. 例如: (1)后端接受一个参数Map param(可能是前端form维护的一个对象...) ...

  5. Java反射机制的原理及作用

    反射机制是Java特性之一,反射机制是构建框架技术的基础所在.灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助. 那么什么是Java的反射呢? 大家都知道,要让Java程序能够运行,那么就 ...

  6. 关于java反射机制(基础篇)

    关于java的反射机制,有一些初步的理解,但是依然存在几点困惑.先将自己理解的部分分享其下,并提出困惑,之后完善. 1. java反射机制是什么? 从两个概念切入:反射机制和java反射机制 ①反射机 ...

  7. java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...

    今天,下午在和朋友聊天的时候,聊起了反射这个话题. 我们就从下面这个段简单的代码开始吧. 这个代码输出什么,想必大部分的读者跟我一样,会很快地知道答案:0 1 2 3 4 5 6 7 8 9.事实也是 ...

  8. Java反射探索研究

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankakay 摘要:本文详细深入讲解是Java中反射的机制,并介绍了如何通过反射来生成对象.调用函数.取得 ...

  9. java 反射详解通俗易懂

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在.灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助. 那么什么是Java的反射呢? 大家都知道,要让Java程序能够运 ...

最新文章

  1. bootstrap账号和文本框在同一行_实用小工具之整理行
  2. API测试工具Postman的下载安装与使用
  3. linux下ifconfig, DNS以及route配置
  4. 用函数刷新页面内容比刷新页面要好
  5. python是脚本语言_Python 脚本语言
  6. qt 日历类 不可输入当前日期之后的日期_UI设计组件时间选择器,日历设计从未如此简单!...
  7. Buy Tickets POJ - 2828 思维+线段树
  8. Milvus 在 AVX-512 与 AVX2 的性能对比
  9. Emmagee性能测试简单的使用
  10. 直通串口线和交叉串口线
  11. java标点符号用什么意思_标点符号的使用我说他说XX说后面在什么情况下加逗号、冒号、冒号双引号、双引号或者逗号双引号等的区分问题请详细说明谢谢...
  12. Xshell怎样才能实现快速粘贴复制
  13. Oracle 自动存储管理 (ASM)
  14. cocos《破碎骑士》开发日志
  15. 汽车电子功能安全标准ISO26262解析(五)——FTA
  16. 全国高校信息 ,全国市州信息 ,全国省市信息 ,全国区县联查信息 2019-08-27
  17. 百度地图定位API,精度提高
  18. 大学计算思维c语言答案,【程序设计论文】计算思维为下的C语言程序设计教学(共2755字)...
  19. Python写节日贺卡
  20. react native 调用手机内置地图

热门文章

  1. 关于华为的E180 3G 无线网卡在windows 7 上的驱动问题
  2. 微软输入法TSF SampleIME 代码浅说
  3. 短视频+直播——直播系统开发新模式
  4. maven mvn Failed during checkstyle execution
  5. linux 下查mac
  6. openstack中RemoteError: AgentNotFoundByTypeHost解决
  7. 解决Fiddler不能监听Java HttpURLConnection请求的方法
  8. Entity Framework技术系列之2:三种开发模式实现数据访问
  9. quicktime无法安装
  10. Git中.gitignore忽略文件(maven项目)