[java] view plaincopy

  1. package org.example.reflection;  
  2.   
  3. import java.lang.reflect.Field;  
  4. import java.lang.reflect.Method;  
  5.   
  6. /** 
  7.  *  
  8.  *  
  9.  * DOC 使用反射,类似javaBean的操作<br/> 
  10.  * 首先获取set方法,然后调用set方法;然后获取get方法,再调用get方法<br/> 
  11.  * 在整个过程中,我们都没有显示的使用Person类的某个具体实例 
  12.  *  
  13.  */  
  14. public class UseReflection {  
  15.   
  16.     public static void main(String[] args) throws Exception {  
  17.         Class clazz = new Person().getClass();  
  18.         Field[] fields = clazz.getDeclaredFields();  
  19.         // 先获取每一个属性,然后调用set和get方法  
  20.         Object person = clazz.newInstance();  
  21.         for (int i = 0; i < fields.length; i++) {  
  22.             Field field = fields[i];  
  23.             // 将字段名称的首字母改为大写,这符合javaBean的方法名称拼写标准  
  24.             String fieldName = field.getName().substring(01).toUpperCase()  
  25.                     + field.getName().substring(1, field.getName().length());  
  26.             // 获取set方法  
  27.             Method setMethod = clazz.getDeclaredMethod("set" + fieldName, field.getType());  
  28.             // 调用set方法  
  29.             if (fieldName.equals("Name")) {  
  30.                 setMethod.invoke(person, "张三");  
  31.             } else if (fieldName.equals("Sex")) {  
  32.                 setMethod.invoke(person, "男");  
  33.             } else {  
  34.                 setMethod.invoke(person, 20);  
  35.             }  
  36.             // 获取get方法  
  37.             Method getMethod = clazz.getDeclaredMethod("get" + fieldName, null);  
  38.             // 调用get方法  
  39.             System.out.println(getMethod.invoke(person, null));  
  40.             // test results:  
  41.             /** 
  42.              * 张三<br/> 
  43.              * 男<br/> 
  44.              * 20 
  45.              */  
  46.         }  
  47.     }  
  48. }