Java 采用反射获取class属性值的实现代码
Java 采用反射获取class属性值的实现代码
发布时间:2016-12-28 来源:查字典编辑
摘要:原理:Java的反射能够获取属性的名称,然后通过invoke调用类的某个方法。比如有个属性叫userName,这个类写了个方法叫getUse...

原理: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学习
编程开发子分类