Java反射 在只知道类名的情况下,怎样给其中的私有属性赋值

只知道类名,就是不能通过导入访问这个类... 只知道类名,就是不能通过导入访问这个类 展开
 我来答
a756142650
推荐于2018-03-13 · TA获得超过130个赞
知道答主
回答量:64
采纳率:100%
帮助的人:52.9万
展开全部

利用反射能

//假设类名为A
// 实例化类
A  p = new A();
// 获取class
Class c = p.getClass();
// 获取该类所有的字段
Field[] fields = c.getDeclaredFields();
// 遍历赋值
for (int i = 0; i < fields.length; i++) {
String filedName = fields[i].getName();
// AccessibleTest类中的成员变量为private,故必须进行此操作
fields[i].setAccessible(true);
// 判断类型
Class<?> type=fields[i].getType();
//获取字段类型
String typeName=type.getName();
System.out.println(type.getName());

// 对字段进行赋值 第一个参数为对象引用第二个参数为要附的值

//如果为字符串类型
if("java.lang.String".equals(typeName)){
fields[i].set(p, "1");
}
//如果为日期类型
else if("java.util.Date".equals(typeName)){
fields[i].set(p, new Date());
}
else{
fields[i].set(p, 1);
}

}

//楼主我只是简单的写了下。可能还需要判断字段名称以及其他类型什么的。



最后希望楼主多看看java 文档。

姜友瑶
2014-03-11
知道答主
回答量:22
采纳率:0%
帮助的人:9.1万
展开全部
/**
* Field的反射与对私有变量的暴力反射。
* 当通过一个实例对象拿到相应的字段对象时,他代表的是所有该类型的字段,不是一个具体实例的该字段,因为
* 他境界提高了
*/
ReflectPoint pt1=new ReflectPoint(5,4);

//对于普通公共成员的反射
Field fieldy=pt1.getClass().getField("y");
System.out.println(fieldy.get(pt1));

//对于私有成员的暴力反射,暴力反射要解决的两个问题,1获得看不见的成员,2 看见了还要设置这个成员是可以被访问的。
Field fieldx=pt1.getClass().getDeclaredField("x");
fieldx.setAccessible(true);
System.out.println(fieldx.get(pt1));

changeStringValue(pt1);
System.out.println(pt1);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a752043837
2014-03-11 · TA获得超过168个赞
知道答主
回答量:47
采纳率:0%
帮助的人:33.1万
展开全部
给私有属性赋值,就调用它的setter方法啊!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
热浪瓦斯
2014-03-11 · 超过17用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:38.2万
展开全部
泛型,反射赋值
具体说一下你的情况,贴出的你代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式