1. 程式人生 > >java通過反射遍歷物件得到屬性\反射賦值

java通過反射遍歷物件得到屬性\反射賦值

import lombok.Data;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

@Data
public class MyFK {
    String name;
    String password;

    /**
     * 通過反射遍歷物件得到物件的值
     * @param myFK
     * @throws Exception
     */
    public void test(MyFK myFK)throws Exception{
        Field[] field = myFK.getClass().getDeclaredFields();
        for(int i=0;i<field.length;i++){
            String fieldName = field[i].getName();//欄位名稱
            String methname = fieldName.substring(0,1).toUpperCase()+fieldName.substring(1); //將屬性的首字元大寫,方便構造get,set方法
            Method m = myFK.getClass().getMethod("get" + methname);
            String value = (String)m.invoke(myFK);
            System.out.println(value);
        }
    }
}
/**
 * 通過反射遍歷給物件賦值 其中map的key需要跟反射類的屬性一致
 * @param 
 * @throws Exception
 */
public void test2(Map<String,String> map)throws Exception{
    MyFK myFK = new MyFK();
    Field[] field = myFK.getClass().getDeclaredFields();
    Set<String> keysets = map.keySet();
    for(int i=0;i<field.length;i++){
        String fieldName = field[i].getName();//欄位名稱
        if(keysets.contains(fieldName)){
            String value = map.get(fieldName);
            String methname = fieldName.substring(0,1).toUpperCase()+fieldName.substring(1); //將屬性的首字元大寫,方便構造get,set方法
            Method m = myFK.getClass().getMethod("set"+methname,String.class);
            m.invoke(myFK,value );
        }
    }
    System.out.println(myFK.toString());
}