import java.lang.reflect.Field; public class ReflectDemo1 { /** * * 将任意对象中的String类型的成员变量所对应的字符串内容中的"b"改成"a" */ public static void main(String[] args) { ReflectDemo2 obj = new ReflectDemo2(); try { changeString(obj); } catch (Exception e) { e.printStackTrace(); } System.out.println(obj); } public static void changeString(Object obj) throws Exception { // 获取该对象的字节码文件 Class c1 = obj.getClass(); // 通过字节码文件获取它的public属性 Field[] f1 = c1.getFields(); // 遍历所有的属性 for (Field field : f1) { // 判断如果所有属性的字节码和String的字节码相同 if (field.getType() == String.class) {// 用等号,因为用的是同一个字节码文件 // 获取该属性的值 String val = (String) field.get(obj); // 替换值的字节 String val2 = val.replace('b', 'a'); // 设置新的值 field.set(obj, val2); } } } } 请问,如果我自定义类的属性是private修饰,这样写还可以吗?或者说必须暴力反射? |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |