国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java 采用反射獲取class屬性值的實現代碼

2019-11-26 16:00:29
字體:
來源:轉載
供稿:網友
原理:Java的反射能夠獲取屬性的名稱,然后通過invoke調用類的某個方法。
比如有個屬性叫userName,這個類寫了個方法叫getUserName,通過invoke調用getUserName這個方法。
代碼如下
復制代碼 代碼如下:

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
public class ParameterBase
{
    /**
     * Get Class field and value Map
     * @return
     */
    public Map<String, String> getClassInfo()
    {
        Map<String ,String>  fieldsAndValues = new HashMap<String, String>();
        Field [] fields = this.getClass().getDeclaredFields();
        for(int i=0; i< fields.length; i++)
        {
            Field f = fields[i];
            String value = getFieldValue(this ,f.getName()).toString();
            fieldsAndValues.put(f.getName(),value);
        }
      return fieldsAndValues;
    } 

   

    private  String getFieldValue(Object owner, String fieldName)
    {
        return invokeMethod(owner, fieldName,null).toString();
    }

   
    /**
     *
     * 執行某個Field的getField方法
     *
     * @param owner 類
     * @param fieldName 類的屬性名稱
     * @param args 參數,默認為null
     * @return
     */
    private   Object invokeMethod(Object owner, String fieldName, Object[] args)
    {
        Class<? extends Object> ownerClass = owner.getClass();

        //fieldName -> FieldName 
        String methodName = fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);

        Method method = null;
        try
        {
            method = ownerClass.getMethod("get" + methodName);
        }
        catch (SecurityException e)
        {
            //e.printStackTrace();
        }
        catch (NoSuchMethodException e)
        {
            // e.printStackTrace();
            return "";
        }

        //invoke getMethod
        try
        {
            return method.invoke(owner);
        }
        catch (Exception e)
        {
            return "";
        }
    }
}

寫一個類User繼承于ParameterBase并寫上一個測試代碼
復制代碼 代碼如下:

public class User extends ParameterBase
{
    String userName ;
    String passWorld;
    public String getUserName()
    {
        return userName;
    }
    public void setUserName(String userName)
    {
        this.userName = userName;
    }
    public String getPassWorld()
    {
        return passWorld;
    }
    public void setPassWorld(String passWorld)
    {
        this.passWorld = passWorld;
    }

    public static void main(String[] args)
    {
        User u = new  User();
        u.passWorld = "123";
        u.userName = "aaaaa";
        System.out.println(u.getClassInfo().toString());

    }
}

程序輸出
復制代碼 代碼如下:

{passWorld=123, userName=aaaaa}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 库伦旗| 宁陵县| 秭归县| 滦平县| 武陟县| 肇东市| 吉木萨尔县| 广灵县| 海林市| 郁南县| 得荣县| 门头沟区| 丽水市| 巫溪县| 板桥市| 贡山| 墨脱县| 诸暨市| 葵青区| 桂阳县| 游戏| 溆浦县| 广宁县| 府谷县| 屯留县| 新昌县| 新建县| 宣汉县| 庆安县| 金塔县| 隆尧县| 泽库县| 石泉县| 长沙市| 松原市| 江川县| 且末县| 会昌县| 饶平县| 新津县| 凤凰县|