当前位置: 移动技术网 > IT编程>开发语言>Java > Java 采用反射获取class属性值的实现代码

Java 采用反射获取class属性值的实现代码

2019年07月22日  | 移动技术网IT编程  | 我要评论
原理: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}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网