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

所属分类: 软件编程 / java 阅读数: 57
收藏 0 赞 0 分享
原理: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}
更多精彩内容其他人还在看

JAVA多线程和并发基础面试问答(翻译)

多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题
收藏 0 赞 0 分享

Java List双击事件实现方法

这篇文章主要介绍了Java List双击事件实现方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Java开发者结合Node.js编程入门教程

这篇文章主要介绍了Java开发者结合Node.js编程入门教程,我将先向您展示如何使用Java EE创建一个简单的Rest服务来读取 MongoDB数据库。然后我会用node.js来实现相同的功能,需要的朋友可以参考下
收藏 0 赞 0 分享

Java数组操作的10大方法

下面是精心整理的Java数组操作的10大方法,大部分代码都来自Stack Overflow,需要的朋友可以参考下
收藏 0 赞 0 分享

Java中的StringBuilder性能测试

这篇文章主要介绍了Java中的StringBuilder性能测试,本文包含测试代码和测试结果,最后得出结论,需要的朋友可以参考下
收藏 0 赞 0 分享

Java基于高精度整型实现fibonacci数列的方法

这篇文章主要介绍了Java基于高精度整型实现fibonacci数列的方法,是比较典型的算法,需要的朋友可以参考下
收藏 0 赞 0 分享

Java、JavaScript、Oracle、MySQL中实现的MD5加密算法分享

这篇文章主要介绍了Java、JavaScript、Oracle、MySQL中实现的MD5加密算法分享,需要的朋友可以参考下
收藏 0 赞 0 分享

Java实现的连续奇数(n+2*x)是合数的算法题暴力算法

这篇文章主要介绍了Java实现的连续奇数(n+2*x)是合数的算法题暴力算法,本文包含运算结果和实现代码,需要的朋友可以参考下
收藏 0 赞 0 分享

java异常机制分析

这篇文章主要介绍了java异常机制,包括异常机制的捕获、抛出及常见的异常机制总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Java使用JDBC连接数据库的实现方法

这篇文章主要介绍了Java使用JDBC连接数据库的实现方法,包括了详细的加载步骤以及完整实现示例,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多