java如何动态修改一个对象的类型

类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方法
怎么回事呢

基本明白了楼组的意思, 这样不知道能否解决, 抽象出需要转型的类型的共同点,然后写成抽象类或者接口 ,是不是用泛型都木有关系,这样可以缓解一定的问题。

另外,假通过反射强制类型转换 怎么用类型变量去引用呢 还只能用Object 。 反射能动态获得对象类型及属性参数 行了追问

麻烦帮忙看下补充

追答

热,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,你懂的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-10

楼主可以换种思路来实现:对于不同的类型,设置不同的参数,如下:

String typeName = type.getName();
String value = "1";
if(typeName.indexOf("int") != -1) {
    field.set(obj, Integer.valueOf(value));
} else if(typeName.indexOf("String") != -1) {
    field.set(obj, value);
} else if(typeName.indexOf("其他类型") != -1) {
    field.set(obj, "类型转换");
}

追问

麻烦帮忙看下补充

本回答被网友采纳
第2个回答  2014-03-09
直接类型强转就行了,没有继承关系的类是不可能互转的追问

强制转不行的

第3个回答  2014-03-09
typ是一个类对象,时test对应的类的类对象,你确定要把obj装换成类对象对应的类吗?追问

麻烦帮忙看下补充