如何给泛型类的实例中的字段设置值?

jinggangshi 2017-11-13 11:36:21
铡学习泛型类的反射,搞不明白如何给泛型类的实例设置字段的值,请大家指教。
在此先行谢过!!!


class A{
public String str1;
public String str2;
public A(){

}
}

public Object getA(String aname){
Object o=null;
Class<?> c;
try {
c = Class.forName(aname);
try {
o = c.newInstance();
//想在这里给str1和str2赋值
//c.getField("filedname")可以获取到字段,get(object)可以取到字符的值,但set(object,object)测试赋值不成功
//问题是这里怎样给str1和str2赋值
//如以下形式:
c.getField("str1").set(str1,"wert");// 这句无效且出错

} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

return o;

}

public String getFiledForName(String f_name){
A o=(A)getA("A");
System.out.println(o.str1);
return o.str1;
}
...全文
1065 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinggangshi 2017-11-13
  • 打赏
  • 举报
回复
明白了,这个O我用错了。 前几次出错后,没有简化程序测试,有一次用o也了了错,故而迷糊了,哈哈。 刚才删除了多余代码试了下成功了。
李德胜1995 2017-11-13
  • 打赏
  • 举报
回复
Class.forName(aname)传入的参数要全限定名 c.getField("str1").set(str1,"wert");。。str1哪里来的???第一个参数是修改其字段的对象,也就是o 改为c.getField("str1").set(o,"wert");。。。。不懂看JDK文档
繁华终归落尽 2017-11-13
  • 打赏
  • 举报
回复

package com;

import java.lang.reflect.Field;

public class ATest {
	public Object getA(String aname){
	    Object o=null;
	    Class<?> c;
	    try {
	        c = Class.forName(aname);
            o = c.newInstance();
            Field field = c.getDeclaredField("str1");
            field.set(o, "wert");
	    } catch (Exception e1) {
	        e1.printStackTrace();
	    }
	     
	    return o;
	     
	}
	
	public String getFiledForName(String f_name){
	    A o=(A)getA("com.A");
	    System.out.println(o.str1);
	    return o.str1;
	}
	
	public static void main(String[] args) {
		ATest a = new ATest();
		a.getFiledForName(null);
	}
}

class A{
    public String str1;
    public String str2;
    public A(){
         
    }
}

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧