需求是这样的:有一个类,类的路径知道,例如是com.xx.xx.xx其中有不同类型的成员变量(个数未知),有对应的setter和getter方法,有一个无参构造和一个全参构造。现在需要用反射机制...

需求是这样的:

有一个类,类的路径知道,例如是com.xx.xx.xx 其中有不同类型的成员变量(个数未知),有对应的setter和getter方法,有一个无参构造和一个全参构造。现在需要用反射机制来获得一个对象,该对象中的成员变量有各自的值。

我做了一下,发现通过Class.forName("com.xx.xx.xx")得到对应的class对象后,调用class对象的getConstructors()方法得到所有构造,然后判断出有参构造。

再利用getConstructor(parameterTypes).newInstance(initargs)的方式进行对象获取时,参数的值和参数类型无法自动匹配。如何解决这个问题?

这是我自己试着写的代码:

public static Object test() throws InstantiationException,

IllegalAccessException, IllegalArgumentException,

InvocationTargetException, NoSuchMethodException, SecurityException {

Class> c = Class.forName("com.xx.xx.xx");

//得到所有构造

Constructor>[] consts = c.getConstructors();

//定义有参构造

Constructor> consts1 = null;

for (int i = 0; i < consts.length; i++) {

int paramsLength = consts[i].getParameterAnnotations().length;

if (paramsLength > 0) {

//判断参数长度取得有参构造

consts1 = consts[i];

}

}

//得到有参构造参数类型

Class>[] type = consts1.getParameterTypes();

//实验性数据

String str1 = "1";

String str2 = "test";

String str3 = "test";

Object[] values = { str1, str2, str3 };

//得到对象

Object obj = c.getConstructor(type).newInstance(values[0],values[1],values[2]);

return obj;

}

测试了一下,报异常:

java.lang.IllegalArgumentException: argument type mismatch

异常抛出的地方是:

Object obj = c.getConstructor(type).newInstance(values[0],values[1],values[2]);

展开

java反射 获取参数类型_Java反射带参构造创建对象时如何自动转换参数类型相关推荐

  1. java反射获取实体类_java 反射获取类对象的三种方式

    Java反射经常用到的就是获取对象中的属性,那么Java获取类对象就是必不可少的啦! Java实体类: public class ReflexModel { private String code; ...

  2. java 反射 获取方法列表_Java 反射获取类详细信息的常用方法汇总

    为了加深印象,特把方法都从新敲了一遍,等不会的时候返回了看看就好了. 类ReflectionDemo package Reflection; @Deprecated public class Refl ...

  3. java反射 获取变量值_Java反射:如何获取变量的名称?

    如果您使用以下的调试信息进行编译:javac -g),局部变量的名称保存在.class文件中.例如,以这个简单的类为例:class TestLocalVarNames { public String  ...

  4. ACMNO.30 C语言-宏交换 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。

    题目描述 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参.输出已交换后的两个值. 输入 两个数,空格隔开 输出 交换后的两个数,空格隔开 样例输入 1 2 样例输出 2 ...

  5. java 获取参数的类型_java反射获取方法名称,参数类型

    package com.mysec.reflex; import java.lang.reflect.Constructor; import java.lang.reflect.Field; impo ...

  6. java获取泛型的类型_Java反射获取泛型类型

    public class Person{ }importjava.lang.reflect.ParameterizedType;importjava.lang.reflect.Type;public ...

  7. java反射 获取方法参数名_java 反射借助 asm 获取参数名称最优雅简单的方式

    背景说明 最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式. jdk7 及其以前,是无法通过反射获取参数名称的. jdk8 可以获取,但是要求指定 -parameter 启动参数,限 ...

  8. java 反射获取修饰符_java之反射和BeanUtils类

    反射和BeanUtils类 1. 类的初始化:类什么什么情况下会加载到内存中 只要类加载到内存中,那么类加载器就会为这个类创建一个class文件对象 2. javaBean:数据库中的表和java中的 ...

  9. java反射获取实现类_Java介绍通过反射获取类的信息

    免费学习推荐:java基础教程 目录1.获取Field 2.反编译Field 3.通过反射机制访问对象属性 4.可变长度参数 5.反射Method(了解) 6.反编译(了解) 7.反射机制调用方法 8 ...

最新文章

  1. 再创新高:DeepMind一年烧掉6.5亿美元,谷歌却挥手免除15亿债务
  2. 最新电子皮肤的触觉有多灵?连空气流动都能感受到
  3. 无插件Vim编程技巧
  4. android学习之旅-学习计划
  5. 罗永浩直播公司回应被列入经营异常:更换了地址 一切正常
  6. 指针大小为什么与类型无关?
  7. wince6.0远程控制工具_用微信远程控制你的电脑,这个工具又加了一些小功能(硬件+软件)...
  8. 【分享】心理测试---家庭画像
  9. Egret入门学习日记 --- 第十二篇(书中 5.1节 内容)
  10. Entity Framework 代码先行之约定配置
  11. Centos7设置SSH安全策略–指定IP登陆
  12. TCL语言语法简介(上)
  13. 三菱PLC漏型源型总结
  14. layabox 场景文件类型有哪些?
  15. fleaphp 快速开发php框架
  16. XAMP安装Apacher无法启动
  17. 服务器安全加固三件套
  18. CSU2020期中测试模拟题1 问题 B: 小帅要缴税
  19. hdu 4541 Ten Googol
  20. 怎么把好几行弄成一行_【excle 如何多行变一行】excel中怎么把多行同一个人的数据变成一行?...

热门文章

  1. Linux Shell脚本专栏_自动发布Java项目(tomcat)_10
  2. 第1篇:Flowable快速工作流脚手架Jsite_克隆项目
  3. 用java servlet Filter编写过滤器
  4. pythonmysql查询转list_python 数据库查询结果转对象
  5. java中怎么把生成文件到项目根目录_[SpringBoot2.X] 02- 项目结构介绍
  6. html asp 日历_全球第一本《2021世界艺术日历》,正式发售!
  7. vuex modules ajax,VUE项目爬坑---6、vuex的真正存在的意义是什么
  8. 加载不同linux内核,Linux内核加载过程
  9. python外星人入侵怎么发给别人_python_外星人入侵(1-1)
  10. wordpressQQ登陆php代码,仅在登录时使用wordpress PHP代码