package com.sjl.reflect;
import java.lang.reflect.Field;
class ReflectPoint {
public String str1 = "I love you ";
public String str2 = "I love you mama ";
public String str3 = "I am xiao shen";
@Override
public String toString() {
return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3="
+ str3 + "]";
}
}
public class TestDemo {
public static void main(String[] args) {
ReflectPoint reflectpoint = new ReflectPoint();//声明一个对象
try {
changeStringValue(reflectpoint);//调用changeStringValue方法
System.out.println(reflectpoint);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void changeStringValue(Object obj) throws Exception{
Field [] fields = obj.getClass().getFields();//Field提供有关类或者接口的字段信息
for(Field field:fields){
//遍历查找是否有String类型
if(field.getType()==String.class){//此处的等号用equals也行 但是==更专业 因为string字节码只有一份。
String oldstr = (String)field.get(obj);
String newstr = oldstr.replace('I', 's'); //调用replace方法,更改字符
field.set(obj, newstr);//get之后还应该把更改后的字符串set给更改对象
}
}
}
}
能把ReflectPoint类里面所有的string里面的I改成s
运行结果:
ReflectPoint [str1=s love you , str2=s love you mama , str3=s am xiao shen]