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]);

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值