- import java.lang.reflect.Array;
- import java.lang.reflect.Field;
- public class ReflectDemo {
-
- public static void main(String[] args) {
- ReflectFieldDemo rfd = new ReflectFieldDemo();
- changFieldValue(rfd);
- System.out.println(rfd);
-
- String[] s = new String[]{"abc","a","bsk"};
- int[] i = {1,2,5,6};
- String s1 = "hello";
- int i1 = 37;
-
- System.out.println("_____________________________________");
- printObject(s);
- printObject(i);
- printObject(s1);
- printObject(i1);
- }
- //打印一个对象,如果对象是数组,打印它的每一个元素。
- // java.lang.reflect.Array
- public static void printObject(Object obj)
- {
- Class clazz = obj.getClass();
- if(clazz.isArray())
- {
- int len = Array.getLength(obj);
- for(int i = 0; i < len; i++)
- {
- System.out.println(obj + ": "+Array.get(obj, i));
- }
- }
- else
- System.out.println(obj);
- }
-
- // 将一个对象中的String字段出现的b全改成a
- public static void changFieldValue(Object obj)
- {
- Field[] fields = obj.getClass().getFields(); //只能得到public修饰的字段!!!
- String oldStrValue = null;
- String newStrValue = null;
-
- for(Field field : fields)
- {
- //如果这个字段所属的是字节码 是 String类型的
- //Filed 类中有getType,得到字段的字节码所属类型 不是这样写的 !if(field.getClass() == String.class)
- if(field.getType() == String.class) //不用 equals,不明白为什么不能用?equals比较值
- {
- try {
- oldStrValue = (String) field.get(obj);
- newStrValue = oldStrValue.replace('b', 'a');
- field.set(obj, newStrValue);
- } catch (IllegalArgumentException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- System.out.println("以前的String变量:"+ field.getName()+",值是:"+oldStrValue
- +"现在的值是:"+newStrValue);
- }
-
- }
- }
-
- }
复制代码 |
|