接着昨天的反射继续来,这篇就讲一个小题目。在一个java类中有三个String类型的成员变量,现在要通过反射来将这三个字符串变量当中的字符b变为a.上代码:
public class RefBean {
public String str1="boy";
public String str2="buss";
public String str3="girl";
public String toString() {
return str1+"<>"+str2+"<>"+str3;
}
}
这是有三个String变量的java类,重写它的toString方法,方便待会打印。下面实现题目要求:
public static void main(String[] args) throws Exception {
RefBean ref = new RefBean();
System.out.println("改变之前:"+ref);
//通过先得到它的字节码,反射得到它的成员变量
Field[] fields = ref.getClass().getFields();
for(Field field :fields){
//这里要用==
if(field.getType() == String.class){
String oldValue =(String)field.get(ref);
String newValue = oldValue.replace("b","a");
field.set(ref,newValue);
}
}
System.out.println("改变之后:"+ref);
}
1.在上面的实体类中我们重写了toString 方法,但我们在后面打印的时候直接可以打印对象名即可,这样系统会自动调用该对象的toString方法进行字符串的输出。
2.上面注释“这里要用==”,是因为在这句代码里我们进行的是类型的比较,而equals方法对比的值,内容的不同,在这里行不通。