黑马程序员技术交流社区
标题:
反射实例细节求解
[打印本页]
作者:
彭颖
时间:
2013-3-26 16:49
标题:
反射实例细节求解
本帖最后由 彭颖 于 2013-3-27 21:52 编辑
private static void changeStringValue(Object obj)throws Exception {
Field[] fields = obj.getClass().getFields();//得到所有字段
for(Field field:fields){//给一个对象给我,然后扫描到所有成员变量,之后把值b改成a
if(field.getType()==String.class){//同一份字节码要用==
//field.getType()/*field是一个字段,是有类型的,所以.getType()*/.equals(String.class)
String oldValue = (String)field.get(obj);//在对象身上取值,(String)我们知道他是String类型
String newValue = oldValue.replace('b', 'a');//替换
field.set(obj, newValue);
}
--------------------------------------------------------------
对于红色勾勒的语句,String.class是取得String类的字节码,为什么说和取得的所有字段类型(getType)是同一字节码,从而作比较,不是很理解,求指点。
作者:
itserious
时间:
2013-3-26 18:37
Field[] fields = obj.getClass().getFields();//得到所有字段
for(Field field:fields){//给一个对象给我,然后扫描到所有成员变量,之后把值b改成a
if(field.getType()==String.class){//同一份字节码要用==
你这里是在遍历Field[], 再用if()来判断,该对象中的那些字段的类型。
如果是String.class,你才会替换这个字段的值中的字母。并没有说,取得的所有字段类型是同一字节码
filed.getType,是指当前字段
,你当前遍历的某一个字段而已。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2