实现:通过反射修改一个对象里面的所有String类型的成员,将变量值中的b修改成a
一、创建一个需要被反射的类,里面有多个已经有默认值String类型的成员变量
- public class Demo {
-
- public int x ;
-
- private int y ;
-
- public String str1 = "table";
- public String str2 = "basketable";
- public String str3 = "itast";
- public int getX() {
- return x;
- }
- public void setX(int x) {
- this.x = x;
- }
- public int getY() {
- return y;
- }
- public void setY(int y) {
- this.y = y;
- }
- @Override
- public String toString() {
- return "Demo [str1=" + str1 + ", str2=" + str2 + ", str3=" + str3 + "]";
- }
-
-
- }
复制代码
二、编写测试方法,并实现其功能
- public void changValue() throws Exception{
- Demo demo = new Demo();//初始化实例
-
- //要求将 demo类中所有String 字段,值中所有的b替换成a
- Field[] fields = demo.getClass().getFields();
- for (Field field : fields) {
- // if(field.getType().equals(String.class)这种写法有问题两个字节码比较
- if(field.getType() == (String.class)){
- String oldValue = (String)field.get(demo);
- // 值替换
- String newValue = oldValue.replace("b", "a");
- // 将修改后的值设置回对象中去
- field.set(demo, newValue);
- }
- }
- // 打印输出结果
- System.out.println(demo);
- }
复制代码
|
|