黑马程序员技术交流社区
标题:
请教关于反射的问题!
[打印本页]
作者:
Tyson
时间:
2014-11-21 18:54
标题:
请教关于反射的问题!
package test;
class ReflectPoint {
public String str1="ball";
public String str2="baskball";
public String str3="itheim";
@Override
public String toString() {
return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3=" + str3
+ "]";
}
}
复制代码
public class ReflectTest {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
ReflectPoint rp=new ReflectPoint();
changeVlaue(rp);
System.out.println(rp);
}
private static void changeVlaue(Object obj)throws Exception {
// TODO Auto-generated method stub
Field [] fields=obj.getClass().getFields();
for (Field field : fields) {
if(field.getType()==String.class){
String oldValue=(String)field.get(obj);
String newValue=oldValue.replace('b', 'a');
field.set(obj, newValue);
}
}
}
}
复制代码
请问各位,这个程序里面的ReflectPoint类中的成员为何一定要加public,不然不能将里面的b替换成a!谢谢!
作者:
sk0806
时间:
2014-11-21 19:34
因为不加public,是私有的,无法通过反射获取到私有的属性,可以进行调试,如果去掉public
Field [] fields=obj.getClass().getFields();获得的长度为0,就是没有获取到属性
想要通过反射获取到私有的,必须要通过暴力反射类获取
有错误之处,请大神手下留情,多多指教,自己的见解
作者:
Tyson
时间:
2014-11-21 20:00
sk0806 发表于 2014-11-21 19:34
因为不加public,是私有的,无法通过反射获取到私有的属性,可以进行调试,如果去掉public
Field [] fields ...
不加public不应该是默认权限的吗?如果是私有的不应该需要加上private的吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2