欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-19 20:31:34
原理:java的反射能够获取属性的名称,然后通过invoke调用类的某个方法。比如有个属性叫username,这个类写了个方法叫getusername,通过invoke调用...
原理: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}

上一篇:

下一篇: