java反射 获取参数类型_Java反射带参构造创建对象时如何自动转换参数类型
需求是这样的:有一个类,类的路径知道,例如是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反射带参构造创建对象时如何自动转换参数类型相关推荐
- java反射获取实体类_java 反射获取类对象的三种方式
Java反射经常用到的就是获取对象中的属性,那么Java获取类对象就是必不可少的啦! Java实体类: public class ReflexModel { private String code; ...
- java 反射 获取方法列表_Java 反射获取类详细信息的常用方法汇总
为了加深印象,特把方法都从新敲了一遍,等不会的时候返回了看看就好了. 类ReflectionDemo package Reflection; @Deprecated public class Refl ...
- java反射 获取变量值_Java反射:如何获取变量的名称?
如果您使用以下的调试信息进行编译:javac -g),局部变量的名称保存在.class文件中.例如,以这个简单的类为例:class TestLocalVarNames { public String ...
- ACMNO.30 C语言-宏交换 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
题目描述 定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参.输出已交换后的两个值. 输入 两个数,空格隔开 输出 交换后的两个数,空格隔开 样例输入 1 2 样例输出 2 ...
- java 获取参数的类型_java反射获取方法名称,参数类型
package com.mysec.reflex; import java.lang.reflect.Constructor; import java.lang.reflect.Field; impo ...
- java获取泛型的类型_Java反射获取泛型类型
public class Person{ }importjava.lang.reflect.ParameterizedType;importjava.lang.reflect.Type;public ...
- java反射 获取方法参数名_java 反射借助 asm 获取参数名称最优雅简单的方式
背景说明 最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式. jdk7 及其以前,是无法通过反射获取参数名称的. jdk8 可以获取,但是要求指定 -parameter 启动参数,限 ...
- java 反射获取修饰符_java之反射和BeanUtils类
反射和BeanUtils类 1. 类的初始化:类什么什么情况下会加载到内存中 只要类加载到内存中,那么类加载器就会为这个类创建一个class文件对象 2. javaBean:数据库中的表和java中的 ...
- java反射获取实现类_Java介绍通过反射获取类的信息
免费学习推荐:java基础教程 目录1.获取Field 2.反编译Field 3.通过反射机制访问对象属性 4.可变长度参数 5.反射Method(了解) 6.反编译(了解) 7.反射机制调用方法 8 ...
最新文章
- 再创新高:DeepMind一年烧掉6.5亿美元,谷歌却挥手免除15亿债务
- 最新电子皮肤的触觉有多灵?连空气流动都能感受到
- 无插件Vim编程技巧
- android学习之旅-学习计划
- 罗永浩直播公司回应被列入经营异常:更换了地址 一切正常
- 指针大小为什么与类型无关?
- wince6.0远程控制工具_用微信远程控制你的电脑,这个工具又加了一些小功能(硬件+软件)...
- 【分享】心理测试---家庭画像
- Egret入门学习日记 --- 第十二篇(书中 5.1节 内容)
- Entity Framework 代码先行之约定配置
- Centos7设置SSH安全策略–指定IP登陆
- TCL语言语法简介(上)
- 三菱PLC漏型源型总结
- layabox 场景文件类型有哪些?
- fleaphp 快速开发php框架
- XAMP安装Apacher无法启动
- 服务器安全加固三件套
- CSU2020期中测试模拟题1 问题 B: 小帅要缴税
- hdu 4541 Ten Googol
- 怎么把好几行弄成一行_【excle 如何多行变一行】excel中怎么把多行同一个人的数据变成一行?...
热门文章
- Linux Shell脚本专栏_自动发布Java项目(tomcat)_10
- 第1篇:Flowable快速工作流脚手架Jsite_克隆项目
- 用java servlet Filter编写过滤器
- pythonmysql查询转list_python 数据库查询结果转对象
- java中怎么把生成文件到项目根目录_[SpringBoot2.X] 02- 项目结构介绍
- html asp 日历_全球第一本《2021世界艺术日历》,正式发售!
- vuex modules ajax,VUE项目爬坑---6、vuex的真正存在的意义是什么
- 加载不同linux内核,Linux内核加载过程
- python外星人入侵怎么发给别人_python_外星人入侵(1-1)
- wordpressQQ登陆php代码,仅在登录时使用wordpress PHP代码