国产探花免费观看_亚洲丰满少妇自慰呻吟_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}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西昌市| 日照市| 灵山县| 乌鲁木齐县| 翼城县| 霍州市| 新晃| 黄冈市| 辽源市| 扬州市| 神木县| 土默特右旗| 游戏| 阆中市| 和静县| 宁阳县| 威海市| 克山县| 锡林浩特市| 启东市| 南涧| 紫金县| 察雅县| 长宁区| 汉中市| 静宁县| 东明县| 平定县| 罗平县| 大兴区| 德兴市| 尼木县| 门头沟区| 许昌市| 深泽县| 和平县| 长白| 乐业县| 连山| 和林格尔县| 洮南市|