类test.Test内容如下
public class Test{public String name="222";}
public static void main(String[] args){
Class typ = Class.forName("test.Test");
Object obj = typ.newInstance();
Field field = typ.getField("name");
field.set(obj, 111);
现在又这样一个对象,就是通过反射创建一个Test对象
最后一行会执行失败,因为类型不符
目前希望实现一个功能,就是能够读取field的类型,并将111转换成指定的类型
想完成下面的方法如何写呢
public void changeType(Object obj, Class typ){
把对象obj转换成typ指定的类型
}
我的意思就是反射创建一个对象,然后从Xml中读取数据给对象初始化,读出来的都是String类型,可是不知道如何进行类型转换,比如读到true,也知道目标字段类型
我有一种想法:
Object obj = 5;
public Object changeType(Object s, Class type){
Method method = type.getMethod("valueOf", s.getClass());
return method.invoke(type, s);
}
我想这样,可是怎么就不行呢
changeType("asdg", obj.getClass());
这样调用怎么也不对,说没有valueOf方法,可是String类里面分明有valueOf方法
怎么回事呢
麻烦帮忙看下补充
追答热,String里面却是有valueOf的静态方法,但是你要看清楚,你的参数是都是正确的,valueOf后面都是值类型,没有String类型,当然提示你找不到这个方法了,
method=demo.getMethod("valueOf", int.class);
method.invoke(demo.newInstance(),1);
这样就可以,
我知道,valueOf都是值类型
而我要取的是int的啊
下面代码就会出错
Object str = "1";
Object int1 = 1;
Method method = str.getClass().getMethod("valueOf", int1.getClass());
你知道valueOf都是值类型,为什么这里你要放一个Object进去?
Object int1 = 1; ("valueOf", int1.getClass()); ???
你打印一下int1.getClass()这个值是这个java.lang.Integer,
应用对象,如参不匹配,就对不上方法了。
method=demo.getMethod("valueOf", int.class); 写成这样就OK。
关键是int都从filed中取得的,必然是一个object
追答JAVA自动装拆箱,参数类型对了就OK,你懂的。
楼主可以换种思路来实现:对于不同的类型,设置不同的参数,如下:
String typeName = type.getName();麻烦帮忙看下补充
本回答被网友采纳强制转不行的
麻烦帮忙看下补充