麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > 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}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费一级毛片在线播放不收费 | 欧美国产一区二区三区 | 一区二区三区国产视频 | 久久久久一本一区二区青青蜜月 | 欧美成人精品h版在线观看 国产一级淫片在线观看 | 免费一级欧美大片视频在线 | 黄视频网址 | 久草手机在线 | 黄色片免费看网站 | 色婷婷久久久亚洲一区二区三区 | 欧美精品欧美极品欧美激情 | 欧洲精品色 | 欧美成人视 | 99成人精品视频 | 久久精品视频在线 | 一色桃子av大全在线播放 | 国产91在线高潮白浆在线观看 | 欧美在线小视频 | 九九午夜 | 欧美一级黄色影院 | 国产99一区二区 | 欧美日韩综合视频 | 久久久一区二区三区精品 | 成人18网站| 久久精品视频首页 | 亚洲欧美不卡视频 | 久久久国产精品网站 | 久久老司机 | 欧美日本一 | 色a综合 | 毛片在哪看 | 成人nv在线观看 | 午夜色视频在线观看 | 国产精品一区二区三区在线看 | 免看黄大片aa | 国产91小视频在线观看 | 日产精品一区二区三区在线观看 | 免费一级特黄毛片视频 | 欧美电影在线观看 | 成人h视频在线 | 欧美成年性h版影视中文字幕 |