本帖最后由 郑文博 于 2012-7-22 21:45 编辑
- /*
- 将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的"b"改成"v"。
- */
- import java.lang.reflect.Field;
- class ReflectDemo
- {
- public String str1 = "ball";
- public String str2 = "basketball";
- public String str3 = "itcast";
- public String toString()
- {
- return str1+".."+str2+"..."+str3;
- }
- }
- public class ReflectTest
- {
- public static void main(String[] args)throws Exception
- {
- ReflectDemo rd = new ReflectDemo();
- changeStringValue(rd);
- System.out.println(rd);
- }
- private static void changeStringValue(Object obj)throws Exception
- {
- Field[] fields = obj.getClass().getFields();
- for(Field field : fields)
- {
- if(field.getType() == String.class)
- /*
- 上一句,为什么String.class不能换成obj.getClass()呢?
- 字节码对应的实例对象三种获取方法是:类名.class;对象.getClass();Class.forName("类名"),
- 我个人理解是:可以替换String.class确切应该是String的对象.getClass()
- 只是此处没有String的对象,有没有可能用父类Object的对象来做呢?
- 请提供一个可以替换的一种方法,多谢。
- */
- {
- String oldValue = (String)field.get(obj);
- String newValue = oldValue.replace("b", "v");
- field.set(obj, newValue);
- }
- }
- }
- }
复制代码 |